我有这样的查询:SELECT DISTINCT查询/子查询
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排列)
- “读取”列是一个整数,它只能取值为'1'或'0'。 last_updated是一个正整数,user_set是一个字符串。
user_set列必须是唯一的。例如:如果有3个条目用于user_set命名如 '开发者' 下面:
- user_set = “开发者”,读= 1,LAST_UPDATED = 10,USER_ID = 2002,pk_id = 1
- user_set =“开发者”,读= 0,LAST_UPDATED = 30,USER_ID = 2002,pk_id = 3
- user_set = “开发者”,读= 0,LAST_UPDATED = 20,USER_ID = 2002,pk_id = 2
然后第二个条目(带有pk_id = 3)应该出现在最上面,而其他都不应该出现b因为它是'读= 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)
那么“为了通过”上“读”的效果是不可见的,做“读ASC”和“读DESC”保持不变。
我试过尽我所能,每次都失败了。任何帮助,我会非常感激。
也许查找选择MAX(列):http://www.postgresql.org/docs/9.3/static/tutorial-agg.html – mcalex