我有以下形式的表:如何按SQL中兩列之一進行分組?
CREATE TABLE Messages ( id VARCHAR(40), src VARCHAR(40), dest VARCHAR(40), time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
我想寫與對應於最新的消息的消息ID一起的查詢將返回所有的ID列表(無論是SRC或DEST字段) 。我不太明白如何以這種方式使用GROUP BY
。此外,這個查詢需要很快(這就是爲什麼我不想簡單地結合兩個查詢:一個用於src和一個用於dest)。但最終,性能是關鍵,無論它是如何完成的。
樣本數據:
id, src, dest, time 0, 0, 1, '2012-10-19 01:15:15' 1, 1, 0, '2012-10-20 01:15:15' 2, 0, 1, '2012-09-19 01:15:15' 3, 1, 0, '2012-04-20 01:15:15' 4, 2, 1, '2013-04-20 01:15:15' 5, 1, 0, '2012-04-20 01:15:15'
預期輸出:
id, person 1, 0 4, 1 4, 2
目前查詢:
SELECT m1.id,m1.src AS person FROM Messages m1 WHERE m1.time IS (SELECT MAX(time) FROM Messages m2 WHERE m2.src=m1.src OR m2.dest=m1.src) UNION SELECT m1.id,m1.dest AS person FROM Messages m1 WHERE m1.time IS (SELECT MAX(time) FROM Messages m2 WHERE m1.dest=m2.dest OR m1.dest=m2.src)
然而,這需要19.99sec與5163行的表。該查詢有26,661,730步。
你應該發佈你已經嘗試過。這給了我們更多的細節,並且我們可以通過稍微修改來複制粘貼代碼來快速給出答案。 – nawfal
或者rahter向我們展示一些示例數據,請沿着預期的輸出:)。 – bonCodigo
關於表現,您的索引列是什麼? – anAgent