2017-03-23 1 views
1

私は数年にわたる大規模なデータセットを持っており、 "53-2016"(2016年の第53週)などの文字列を取得できません。MySQLで週番号と年を指定すると、先週末に問題が発生する

私のクエリは次のとおりです。

このクエリを使用して
SELECT 
    date, 
    DATE_FORMAT(date, "%v-%Y") AS week,  
FROM myTable 
GROUP BY week 
ORDER BY date; 

私は一つだけを持ちたい2つの行を取得します。

これはGROUP BY weekのために発生します。 2015年の終わりに、12月の28-31日が53-2015週に追加され、残りの週(1月1-3日)が53-2016という行に追加されます。

1月の最初の3日間を53-2015グループに追加する方法はありますか?

答えて

0

私は自分でそれを考え出すことになりました。

MySQLは、DATE_FORMAT()に年を印刷する第2の方法があります。

% X - 月曜日が週の最初の日である週の年、4桁の数字は、%vで使用するには、

これは問題に解決、そして私のクエリが通り終わった:

SELECT 
    date, 
    DATE_FORMAT(date, "%v-%x") AS week,  
FROM myTable 
GROUP BY week 
ORDER BY date; 
0

はい、これを行うことができます。 は、以下の

SELECT 
    date, 
    DATE_FORMAT(DATE_SUB(date, INTERVAL MOD(DAYOFWEEK(`date`) +5,7) DAY), "%v-%Y") AS week 
FROM myTable 
GROUP BY week 
ORDER BY date; 

これは曜日を照会し、その日々は基本的にこのようなものについては(複数のテストを何前の月曜日

0

に切り捨てられる日差し引きますしています... )?

#DROP TABLE TT1; 
CREATE TABLE TT1 (date datetime); 

INSERT INTO TT1 values ('2015-12-31'); 
INSERT INTO TT1 values ('2016-01-01'); 
SELECT 
    date, 
    CONCAT(DATE_FORMAT(date, "%v") , '-', CASE WHEN DATE_FORMAT(date, "%v")>52 AND DATE_FORMAT(date, "%m")=1 THEN DATE_FORMAT(date, "%Y")-1 ELSE DATE_FORMAT(date, "%Y") END) AS week  
FROM TT1; 

DROP TABLE TT1; 

出力:

date week 
1 31.12.2015 00:00:00 53-2015 
2 01.01.2016 00:00:00 53-2015 
+0

答えをありがとう。あなたの質問には2016年から2017年までの週に問題がありますが、私は問題を解決するために努力して答えを投稿しました。 – Frederik

関連する問題