我正在尋找一個日誌表,以便根據id的第一次出現,按id進行分組。在我下面的例子中,我有一個'測試'表,我想按id對錶進行分組,這樣所有的id都在一起,即列出所有'623'條目,然後列出所有'444'條目。我希望'623'條目先來,因爲第一條'623'記錄出現在第一條'444'條目之前。按時間排序,並基於ID的第一次出現
輸入:
╔═══════╦════════════╦═════╗
║ uid ║ time ║ id ║
╠═══════╬════════════╬═════╣
║ 001 ║ 01:45:10 ║ 623 ║
║ 002 ║ 02:45:20 ║ 444 ║
║ 003 ║ 03:45:30 ║ 444 ║
║ 004 ║ 04:45:40 ║ 623 ║
║ 005 ║ 05:45:50 ║ 623 ║
║ 006 ║ 06:45:00 ║ 444 ║
╚═══════╩════════════╩═════╝
輸出:
╔═══════╦════════════╦═════╗
║ uid ║ time ║ id ║
╠═══════╬════════════╬═════╣
║ 001 ║ 01:45:10 ║ 623 ║
║ 004 ║ 04:45:40 ║ 623 ║
║ 005 ║ 05:45:50 ║ 623 ║
║ 002 ║ 02:45:20 ║ 444 ║
║ 003 ║ 03:45:30 ║ 444 ║
║ 006 ║ 06:45:00 ║ 444 ║
╚═══════╩════════════╩═════╝
我來最接近的是這樣的:
select time, id from test group by id, time
╔═══════╦════════════╦═════╗
║ uid ║ time ║ id ║
╠═══════╬════════════╬═════╣
║ 002 ║ 02:45:20 ║ 444 ║
║ 003 ║ 03:45:30 ║ 444 ║
║ 006 ║ 06:45:00 ║ 444 ║
║ 001 ║ 01:45:10 ║ 623 ║
║ 004 ║ 04:45:40 ║ 623 ║
║ 005 ║ 05:45:50 ║ 623 ║
╚═══════╩════════════╩═════╝
但這不完全是因爲它是由訂購ID。我不確定正確的語法是如何讓所有的'623'條目首先被列出,因爲第一條'623'記錄出現在第一條'444'條目之前。
在此先感謝您的幫助。
得到了答案:
SELECT test.time, test.id FROM
(
(SELECT DISTINCT id FROM test ORDER BY time ASC) as distinct_test
LEFT JOIN
test ON distinct_test.id = test.id
)
那現在,我看很有道理。感謝大家的幫助。
我剛剛交了一個答案,然後意識到的東西。你的'身份證'並不鮮明。你可以調整你的例子來包含一個不同的主鍵,然後用一個單獨的字段代替'id'嗎?或者至少只是將'id'重命名爲別的東西? – 2012-07-19 19:17:04
該id值是不是唯一的。如果有幫助,我會在唯一的ID字段中添加。 – DanM7 2012-07-19 20:08:30
是的,我知道。你所做的就是我想要的。謝謝。 – 2012-07-20 02:29:44