2017-03-24 12 views
0

私は毎日のレコードがあるかもしれないテーブルにデータを持っています。私は最後の6週間のデータを取得する必要があります。ここでは、毎週最後のレコードしか必要としません。mysqlで毎週最後のレコードを取得する方法

今日が24日であれば、18日から24日と11日から17日までの最後のレコードを6週間まで取得する必要があるとします。

このクエリでは6週間のレコードがすべて提供されますが、毎週最後のレコードが必要です。

SELECT snap.created_at 
FROM snapshots snap 
WHERE snap.created_at > DATE_SUB(NOW(), INTERVAL 6 WEEK) 
ORDER BY created_at DESC; 

例:

のcreated_at

2017年3月23日十一時20分30秒

2017年3月23日10時40分21秒

2017-03- 21 09:58:42

2017-03-03 15:02:20

2017年3月2日午後02時41分49秒

2017年2月23日午前10時59分26秒

2017年2月22日午後03時59分53秒

2017年2月21日11 :08:57

2017年2月21日午前十時43分24秒

2017年2月18日1時37分33秒

2017年2月11日1時38分29秒

出力:

(第1週)2017年2月11日 - 2017年2月17日= 2017年2月11日午前1時38分29秒

(第2週)2017年2月18日 - 2017年2月24日= 2017年2月23日午前10時59分26秒

(第3週)2017年2月25日 - 2017年3月3日= 2017年3月3日夜3時02分20秒

(第4週)2017-03-04 - 2017-03-10 = 2017-03-03 15:02:20(今週のレコードがないので、先週の最新のレコードを表示する必要があります)

(第5週)2017-03-11-2017-03-17 = 2017-03-03 15: 02:20(今週のレコードがなく、先週の最新のレコードを表示する必要があるため)

(第6週)2017-03-18 - 2017-03-24 = 2017-03- 23 11時20分30秒

+0

をお試しください今から6日目になると、最初の週の始まりが後ろに移動するでしょうか?ここにサンプルデータを入れて、予期した結果を含めてください –

+0

MYSQLやSQLを使っていますか? –

+0

select * from tableの間にselectクエリを書くwhere DATEDIFF(GETDATE()-6、 'DAYS')とGETDATE()の間のcol_Date –

答えて

0

あなたはsubtracを意味し、この

select datepart(wk, datecolumn), max(datecolumn) from yourtable 
where (datediff(wk,datecolumn,getdate())) < 6 
group by datepart(wk, datecolumn) 
order by 2 desc 
関連する問題