2017-03-24 148 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 
相关问题