Postgres SQL 连接第二个表中的最新记录

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

一个用户有很多设备。这些设备有很多事件。我想选择所有用户设备和每个设备的最新事件。我试过:

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;

我获得了所有用户设备及其所有事件的列表。因此,每个设备的每个事件都有多个行。我只想要最新的活动。

sql postgresql left-join inner-join
1个回答
0
投票

您可以使用横向联接来扫描相关表中的最新行。例如:

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'
© www.soinside.com 2019 - 2024. All rights reserved.