我有这样的查询:
SELECT user_set, read, last_updated, user_id, pk_id
FROM interaction_log
WHERE user_id = 2002
ORDER BY read, last_updated, user_set
正在使用的数据库是PostgreSQL(9.1),需求如下:
user_set列必须是唯一的。例如:如果有一个名为'devs'的user_set有3个条目,如下所示:
然后第二个条目(pk_id = 3)应该位于顶部,其他任何一个都应该显示,因为它是'read = 0'然后它的last_updated值是30(高于20)。
SELECT DISTINCT ON(user_set)希望我将user_set作为第一个排序顺序,它将改变顺序,因此我不能这样做。
如果我这样做:
SELECT DISTINCT ON (user_set) user_set, read, last_updated, thread_id, user_id, id
FROM message_interaction_log
WHERE (user_set, read, last_updated, thread_id, user_id, id) IN
(SELECT user_set, read, last_updated, thread_id, user_id, id
FROM message_interaction_log
WHERE user_id = 14
ORDER BY read DESC, last_updated, user_set)
然后,“读取”的'order by'效果是不可见的,并且“读取ASC”和“读取DESC”保持不变。
我尝试过尽我所能,但每次都失败了。任何帮助都会非常感激。
答案 0 :(得分:1)
SELECT user_set, read, last_updated, user_id, pk_id
FROM message_interaction_log
WHERE (user_set, last_updated) IN (
SELECT user_set, max(last_updated)
FROM message_interaction_log
WHERE user_id = 2002
GROUP BY user_set
)