【发布时间】:2014-01-29 14:34:43
【问题描述】:
我有这样的结构表
ID From_Year From_Month To_Year To_Month int
1 2011 4 2012 3 8
2 2012 4 2013 3 8.6
3 2013 4 2014 3 8
4 2014 4 2014 8 8
5 2014 9 2015 3 8
当提供月份和年份时,我需要从该表中获取正确的行 对于前
1-2012 行 ID 1
5-2013 行 ID 3
我有查询
select * from tbl_fin where
(
(From_month <=1 and From_Year =2014) OR
(To_month >= 1 and To_Year =2014)
)
这里 1 是月份,2014 是年份
但它不适用于 1-2014 年
你能推荐其他选择吗
【问题讨论】:
-
这些是您的确切列名吗?如果是这样,那是您的问题 - 他们会希望在您的定义中与您的查询中相同(并且它们是区分大小写的)
-
“正确的行”是什么意思?假设 From_y,From_m 是 start_date,to_y to_m 是 end_date 你想读什么?所有在某个日期之前开始并在之后结束的记录?从某一年开始或在某一年结束的所有记录?上面的查询选择在 2014 年 1 月之前或期间开始或在 2014 年 1 月之后或之后结束的所有记录。
-
@odedsh 表示月 = 1 和年 = 2012 正确的 ID 是 1,月 = 5 和年 = 2013 的正确 ID 是 3
-
您想要给定日期在 FROM_MONTH/FROM_YEAR 和 TO_MONTH/TO_YEAR 之间的记录。到目前为止,上述工作的唯一原因是因为您每年有约 1 条记录。按照@MaGnetas 给出的答案。转换为日期/数字以获得更有效的解决方案如果单个记录跨越 3 年,它将起作用.. 或者如果某年有每月记录