【发布时间】:2017-03-24 05:31:04
【问题描述】:
我的表中有数据,我可能有也可能没有每天的记录。我需要获取最近 6 周的数据,我只需要每周的最后一条记录。
假设今天是 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-03-23 11:20:30
2017-03-23 10:40:21
2017-03-21 09:58:42
2017-03-03 15:02:20
2017-03-02 14:41:49
2017-02-23 10:59:26
2017-02-22 15:59:53
2017-02-21 11:08:57
2017-02-21 10:43:24
2017-02-18 01:37:33
2017-02-11 01:38:29
输出:
(第 1 周)2017-02-11 - 2017-02-17 = 2017-02-11 01:38:29
(第 2 周)2017-02-18 - 2017-02-24 = 2017-02-23 10:59:26
(第 3 周)2017-02-25 - 2017-03-03 = 2017-03-03 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
【问题讨论】:
-
您的意思是从现在减去日期到 6,这将是向后移动的第一周的开始?只需在此处包含示例数据和预期结果
-
你使用的是 MYSQL 还是 SQL?
-
编写一个选择查询,条件为 select * from table where col_Date between DATEDIFF(GETDATE() -6,'DAYS') AND GETDATE()
-
你有自动增量id字段吗?每周你需要 min(created_at) 或 max(created_at) 的最后一条记录是什么?
-
我需要 max(created_at)