我正在寻找一个日志表,以便根据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