1

これは私のクエリの一部です:

WHERE WEEK( data.time ) = ( WEEK( CURRENT_DATE + INTERVAL -3 WEEK ) )

3週間前、つまり2012年12月のデータを選択できます。問題は、その週のすべての年のデータを取得することです。3週間前のものだけではありません。

追加する

YEAR( data.time ) = YEAR( CURRENT_DATE + INTERVAL -3 WEEK ) 

問題は解決しましたが、年も比較する必要があるのでしょうか、それとも週の比較だけにとどまることができるのでしょうか。最初の行をなんとか調整すればよいのでしょうか。

私はここ MySQLの週番号と新年で同様のクエリを見つけまし たが、彼らは年に関するそのような問題について言及しておらず、年の比較がなくてもうまくいくようです。

4

2 に答える 2

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だろYEAR2012。2013-01-13の場合、2013-W01の一部WEEKでも1ありYEARます2013。したがって、これを単純に使用するWEEKYEAR、間違った結果が得られます。

于 2013-01-08T10:29:00.680 に答える
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) 

これを行うと、週と年、または月と年の両方に一致するデータが返されるようになります。

于 2013-01-08T10:22:08.040 に答える