按日期分组并取最后一个

问题描述 投票:0回答:2

这是我的桌子:

Database

我正在尝试做的,是通过用户caserne承担用户的最后责任。例子,我应该有这个结果:

id    id_user    id_caserne    id_dispo    created_at
31    21         12            1           2019-10-24 01:21:46
33    21         13            1           2019-10-23 20:17:21

我已经尝试过此sql,但它似乎并非一直都有效:

SELECT * FROM 
    ( SELECT id, id_dispo, id_user, id_caserne, MAX(created_at) 
    FROM disponibilites GROUP BY id_user, id_caserne, id_dispo 
    ORDER BY created_at desc ) AS sub 
GROUP BY id_user, id_caserne

我在做什么错?

sql
2个回答
0
投票

我将只使用相关子查询在where子句中使用过滤:

select d.*
from disponibilites d
where d.created_at = (select max(d2.created_at)
                      from disponibilites d2
                      where d2.id_user = d.id_user
                     );

0
投票

您可以使用相关的子查询,如Gordon Linoff所示,如果您的RDBMS支持,则可以使用窗口函数:

select * from (
    select 
        t.*,
        rank() over(partition by id_caserne, id_user order by created_at desc) rn
    from disponibilites t
) x
where rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.