【问题标题】:How to get last record in every week in mysql如何在mysql中获取每周的最后一条记录
【发布时间】: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)

标签: mysql datetime


【解决方案1】:

试试这个

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

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2016-07-27
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2011-09-06
    • 2012-02-13
    • 2023-01-28
    相关资源
    最近更新 更多