【问题标题】:How to get last record of each day in mysql?如何在mysql中获取每天的最后一条记录?
【发布时间】:2016-09-03 17:00:32
【问题描述】:

我想在mysql中获取每天的最后一条记录。Location<id, date, place_id> 表每天都有多个条目。此 Location 表具有 place_id 和插入 place_id 的时间。

还要考虑如果 place_id 不存在,则返回具有 place_id 的倒数第二个记录。在NULL, '2016-04-06 18:52:06' 记录的下表中,我们返回'13664', '2016-04-06 12:57:30',它是“2016-04-06”(3 月 6 日)的倒数第二个记录,并且具有 place_id。

还有一点,单日会有更多place_id,见下表..

   id  ||  place_id || date
   '1',   '47', '2016-04-05 18:09:37'
   '2',   '48', '2016-04-05 12:09:37'
   '3',   '13664', '2016-04-06 12:57:30'
   '4',   '9553', '2016-04-08 10:09:37'
   '5',   NULL, '2016-04-06 18:52:06'
   '6',   '9537', '2016-04-07 03:34:24'
   '7',   '9537', '2016-04-07 03:34:24'
   '8',   '656', '2016-04-07 05:34:24'
   '9',   '7', '2016-04-07 05:34:57'

当我运行以下查询时,它会返回以下结果

查询我运行以下查询,但结果错误

`Location<id, place_id, date>`

select L1.place_id, L1.date from 
     Location1 L1 
Left join
     Location1 L2
on 
     Date(L1.date) = Date(L2.date)
And
    L1.date < L2.date
where 
    L2.date is null

group by L1.date;

我想要的结果:

 id....place_id ........date   
   '1',   '47',      '2016-04-05 18:09:37'    
   '3',   '13664',   '2016-04-06 12:57:30'  
   '4',   '9553',    '2016-04-08 10:09:37'   
   '9',   '7',       '2016-04-07 05:34:57'

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以尝试以下查询吗:

    SELECT * FROM `Location` GROUP BY DATE(`date`) ORDER BY `date` DESC
    

    此查询的作用是按日期降序对行进行分组,并为每个日期显示一行。

    获取最后一条记录:

    SELECT * FROM `Location` ORDER BY `date` LIMIT 1;
    

    获取没有 null 作为值的最后一条记录:

    SELECT * FROM `Location` WHERE place_id IS NOT NULL ORDER BY `date` LIMIT 1;
    

    获取所有不为空的地方的记录:

    SELECT * FROM `Location` WHERE place_id IS NOT NULL GROUP BY `place_id` ORDER BY `date` DESC
    

    【讨论】:

    • Last record like - 只有一条记录,最后一条进入?
    • 我已经编辑了我的答案,查看最后一个查询,它可以快速完成工作并为您提供所有 place_id 的信息
    【解决方案2】:

    这行得通吗?

    select place_id, max(date) as MaxDate
    from foo
    where place_id is not NULL
    group by place_id
    

    【讨论】:

    • 一天,place_id会比较多,所以不能按place_id分组,也不能用max,因为我要的是对应日期的place_id...
    【解决方案3】:

    你可以试一试:

    SELECT 
    L.id,
    L.place_id,
    L.date
    FROM Location L
    INNER JOIN 
    (
      SELECT 
       MAX(date) max_time
      FROM Location
      GROUP BY Date(`date`)
    ) AS t
    ON L.date = t.max_time
    

    SQL FIDDLE DEMO

    SQL FIDDLE DEMO2

    [根据您的预期输出]

    【讨论】:

    • 其实我带了对应的place_id,它有最大值。不管它是否为空。
    • 我已经修改了 sql fiddle 中的查询。请检查小提琴。
    • 太棒了。看起来不错。在我用我的数据库测试后,我会接受你的答案,我赞成你......
    • 查询未提供所有 place_id 的信息
    • id 是否与place_id 对应,由您选择。如果你想要place_id 对应的 id,那么你可以使用SQL FIDDLE DEMO2。或者,如果您希望 id 对应于 max_date 字段,则可以使用 SQL FIDDLE DEMO
    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 2021-07-23
    • 2016-07-27
    • 2022-01-19
    • 2023-03-16
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多