仅显示每天的最新日期记录

Posted

技术标签:

【中文标题】仅显示每天的最新日期记录【英文标题】: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”的适当解决方案

【问题讨论】:

【参考方案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
)

【讨论】:

以上是关于仅显示每天的最新日期记录的主要内容,如果未能解决你的问题,请参考以下文章