2017-03-24 151 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日11時二十分三十秒

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

2017-03- 21 09:58:42

2017-03-03 15:02:20

2017年3月2日14時41分49秒

2017年2月23日10點59分26秒

2017年2月22日15時59分53秒

2017年2月21日11 :08:57

2017年2月21日10時43分24秒

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

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

輸出:

(第一週)2017年2月11日 - 2017年2月17日= 2017年2月11日1點38分29秒

(第二週)2017年2月18日 - 2017年2月24日= 2017年2月23日10點59分26秒

(第三週)2017年2月25日 - 2017年3月3日= 2017年3月3日15時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

你的意思是subtrac從現在開始到6日,這將是第一週後退的開始?只是包括一個樣本數據在這裏和預期的結果 –

+0

你在工作MYSQL或SQL? –

+0

寫一個選擇查詢之間的條件,如選擇*從表where DATEDIFF(GETDATE()-6,'DAYS')和GETDATE()之間col_Date() –

回答

0

試試這個

select datepart(wk, datecolumn), max(datecolumn) from yourtable 
where (datediff(wk,datecolumn,getdate())) < 6 
group by datepart(wk, datecolumn) 
order by 2 desc 
相關問題