一个用户有很多设备。这些设备有很多事件。我想选择所有用户设备和每个设备的最新事件。我试过:
SELECT UD.DEVICE_ID, UD.NICK_NAME, UD.ACTIVATION_DATE, AE.CREATED_AT, AE.ACTION_NAME
FROM USER_DEVICE UD
LEFT JOIN (
SELECT DEVICE_ID, CREATED_AT, ACTION_NAME
FROM ADVICE_EVENT
WHERE DEVICE_ID IN (
SELECT DEVICE_ID
FROM USER_DEVICE
WHERE ID_TOKEN = 'myToken'
)
) AE ON UD.DEVICE_ID = AE.DEVICE_ID
WHERE UD.ID_TOKEN = 'myToken' AND UD.DEVICE_ID IS NOT NULL;
我获得了所有用户设备及其所有事件的列表。因此,每个设备的每个事件都有多个行。我只想要最新的活动。
您可以使用横向联接来扫描相关表中的最新行。例如:
select *
from user_device d
left join lateral (
select * from advice_event e where e.device_id = d.device_id
order by created_at desc limit 1
) x on true
where d.id_token = 'myToken'