我正在寻找一个日志表,以便根据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
)
现在我明白这是有道理的。谢谢大家的帮助。
答案 0 :(得分:1)
像...一样的东西。
SELECT test.id,
test.time
FROM (SELECT DISTINCT id
FROM test
ORDER BY time ASC) distinct_test
RIGHT JOIN test ON distinct_test.id = test.id
这可能行不通,但至少可能会让你继续前进。
答案 1 :(得分:1)
嗯?
SELECT time, id FROM test group by id, time order by id desc
答案 2 :(得分:1)
以下是您需要使用的代码;我在你的数据上测试它并且它工作了。它与Jason Swett基本相同,除非你必须使用LEFT OUTER JOIN
而不是RIGHT OUTER JOIN
。
SELECT t.id, t.time
FROM (SELECT DISTINCT id
FROM `table`
ORDER BY time ASC) distinct_t
LEFT OUTER JOIN `table` t ON distinct_t.id = t.id;