我正在寻找一个日志表,以便根据 id 的第一次出现按 id 分组。在下面的示例中,我有一个表“test”,我想按 id 对表进行分组,以便所有 id 都在一起,即列出所有“623”条目,然后列出所有“444”条目。我希望“623”条目排在第一位,因为第一个“623”记录在第一个“444”条目之前。
输入:
╔═══════╦════════════╦═════╗
║ 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
)
现在我看到它是有道理的。感谢大家的帮助。