[英]PostgreSQL select distinct by two columns
我有一張桌子
發件人ID | 接收者 ID | 日期 |
---|---|---|
1 | 2 | “2022-08-10T07:21:12.881Z” |
2 | 1 | “2022-08-10T07:28:12.881Z” |
2 | 1 | “2022-08-10T07:22:12.881Z” |
1 | 2 | “2022-08-10T07:25:12.881Z” |
當前查詢
SELECT DISTINCT ON ("senderId", "receiverId") "sender"."id" AS "senderId", "receiver"."id" AS "receiverId", cm."createdAt" AS "createdAt" FROM "chat_message" "cm" LEFT JOIN "user" "sender" ON "sender"."id"="cm"."senderId" LEFT JOIN "user" "receiver" ON "receiver"."id"="cm"."receiverId" WHERE "senderId" = 2 OR "receiverId" = 2 ORDER BY "senderId", "receiverId" ASC, cm."createdAt" DESC
當前結果
發件人ID | 接收者 ID | 日期 |
---|---|---|
1 | 2 | “2022-08-10T07:25:12.881Z” |
2 | 1 | “2022-08-10T07:28:12.881Z” |
預期結果
發件人ID | 接收者 ID | 日期 |
---|---|---|
2 | 1 | “2022-08-10T07:28:12.881Z” |
所以,我只需要 select 這對中日期較大的一行
我們可以在這里使用LEAST
/ GREATEST
技巧和DISTINCT ON
:
SELECT DISTINCT ON (LEAST(senderId, receiverId),
GREATEST(senderId, receiverId))
LEAST(senderId, receiverId) AS senderId,
GREATEST(senderId, receiverId) AS receiverId,
createdAt
FROM chat_message
ORDER BY 1, 2, createdAt DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.