这是我的桌子:
我正在尝试做的,是通过用户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
我在做什么错?
我将只使用相关子查询在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
);
您可以使用相关的子查询,如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