我有這樣的查詢: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