【问题标题】:show only latest date record for each day仅显示每天的最新日期记录
【发布时间】:2020-08-03 21:46:52
【问题描述】:

我有一张如下表

ID    apiDate                   totalCases
1     2020-04-18 12:00:00       10
2     2020-04-18 12:00:00       15
3     2020-04-19 12:00:00       20
4     2020-04-19 12:00:00       25      
5     2020-04-19 12:00:00       30
6     2020-04-20 12:00:00       35
7     2020-04-20 12:00:00       40
8     2020-04-20 12:00:00       45  

我想返回每天的最新记录如下

ID    apiDate                   totalCases
2     2020-04-18 12:00:00       15     
5     2020-04-19 12:00:00       30
8     2020-04-20 12:00:00       45  

我添加了另一个名为“dateonly”的列并达到了我的要求

SELECT 
    *
FROM 
    myTable H
WHERE
    `apiDate` = 
    (
        SELECT 
            max(`apiDate`) 
        FROM 
            myTable
        WHERE
            `dateonly` = H.dateonly
    )

我正在寻找不添加列“dateonly”的适当解决方案

【问题讨论】:

    标签: mysql sql date greatest-n-per-group


    【解决方案1】:

    你考虑过窗口功能吗?

    select ID, apiDate, totalCases
    from (select t.*,
                 row_number() over (partition by date(apidate) order by apidate desc) as seqnum
          from mytable t
         ) t
    where seqnum = 1;
    

    【讨论】:

      【解决方案2】:

      您使用相关子查询进行过滤的解决方案几乎就在那里。您只需要修复相关性子句,使其匹配当天而不是整个日期和时间

      我会这样写:

      select t.*
      from mytable t
      where t.apidate = (
          select max(t1.apidate)
          from mytable t1
          where t1.apidate >= date(t.apidate) and t1.apidate < date(t.apidate) + interval 1 day
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 2016-03-04
        • 1970-01-01
        • 2021-11-19
        • 2012-07-09
        • 1970-01-01
        相关资源
        最近更新 更多