这是我的查询的一部分:
WHERE WEEK( data.time ) = ( WEEK( CURRENT_DATE + INTERVAL -3 WEEK ) )
我可以从三周前选择数据,即2012年12月。 现在问题是 - 我获得了所有年份的那一周的数据。不仅仅是三周前的那个。
添加
YEAR( data.time ) = YEAR( CURRENT_DATE + INTERVAL -3 WEEK )
解决了这个问题,但是我想知道是否有必要比较这些年份,或者我是否只能参加周比较 - 如果我以某种方式调整第一行。
我在这里找到了类似的查询 MySQL week numbers and New Year 但他们多年没有提到这样的问题,即使没有年份比较,它似乎也适用于他们。
答案 0 :(得分:2)
通过与所需周的开始和结束进行比较,您将获得更好的服务。类似的东西:
WHERE SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 21) <= data.time
AND data.time < SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 14);
会在一年的第一周和最后一周产生影响。例如,2012-12-31是2013-W01的一部分( 2013 的第一周)。因此WEEK
会说1
而YEAR
会说2012
。鉴于2013-01-13,2013-W01的一部分WEEK
为1
而YEAR
为2013
。如此天真地使用WEEK
和YEAR
会给你错误的结果。
答案 1 :(得分:0)
我会说是的,如果您的表中存在多年的数据,那么您应该始终包含Year()
比较。
除非您告诉它您只想要2012年,否则您的数据库不知道。
因此,当您编写查询时,您将包括:
select *
from yourtable
where week(yourdate) = week(CURRENT_DATE + INTERVAL -3 WEEK)
and year(yourdate) = year(CURRENT_DATE + INTERVAL -3 WEEK)
如果您要比较几个月,那就相同:
select *
from yourtable
where month(yourdate) = month(CURRENT_DATE + INTERVAL -3 WEEK)
and year(yourdate) = year(CURRENT_DATE + INTERVAL -3 WEEK)
这样做可确保您返回的数据与周,年,月,年相匹配。