我是SQL的新手,无法找到如何进行以下查询。当然,我错过了一个非常基本的表达,但我自己无法找到它。
我有下表,用于存储应用程序日志条目。每个条目都有一个记录时间戳,创建该条目的应用程序的标识符,应用程序实际执行的操作以及该应用程序实例的给定会话的唯一ID。
item_id item_datetime app action session_id 1 2011-06-20 19:01:04 a start 23B6C531-6D38-4E47-A887-10B945B48BD9 2 2011-06-20 19:01:05 b start 7E6D0F55-4280-46DF-A829-F6821FF028D5 3 2011-06-20 19:03:45 b job 7E6D0F55-4280-46DF-A829-F6821FF028D5 4 2011-06-20 19:09:33 a job 23B6C531-6D38-4E47-A887-10B945B48BD9 5 2011-06-20 19:27:00 a quit 23B6C531-6D38-4E47-A887-10B945B48BD9 6 2011-06-20 19:50:00 c start 12345678-1234-4321-1234-109876543210 7 2011-06-20 19:50:01 c quit 12345678-1234-4321-1234-109876543210 8 2011-06-20 19:50:22 b quit 7E6D0F55-4280-46DF-A829-F6821FF028D5
在此示例中,有3个不同的应用程序“a”,“b”和“c”同时执行,每个会话与其他会话重叠。我需要的是一个由会话分组的列表,会话(结果组)应按会话开始时间排序。 对于上面的示例表,我期望得到以下结果:
item_id item_datetime app action session_id 1 2011-06-20 19:01:04 a start 23B6C531-6D38-4E47-A887-10B945B48BD9 4 2011-06-20 19:09:33 a job 23B6C531-6D38-4E47-A887-10B945B48BD9 5 2011-06-20 19:27:00 a quit 23B6C531-6D38-4E47-A887-10B945B48BD92 2011-06-20 19:01:05 b start 7E6D0F55-4280-46DF-A829-F6821FF028D5 3 2011-06-20 19:03:45 b job 7E6D0F55-4280-46DF-A829-F6821FF028D5 8 2011-06-20 19:50:22 b quit 7E6D0F55-4280-46DF-A829-F6821FF028D5
6 2011-06-20 19:50:00 c start 12345678-1234-4321-1234-109876543210 7 2011-06-20 19:50:01 c quit 12345678-1234-4321-1234-109876543210
我尝试按顺序分组,但问题是结果的排序是基于session_id的字母顺序 - 但这不是我需要的,会话ID的唯一性是重要的,它们的“值”是无所谓。
答案 0 :(得分:2)
您可以使用子查询查找会话的第一个日期。这允许您订购会话:
select yt.item_id
, yt.item_datetime
, yt.app
, yt.action
, yt.session_id
from (
select session_id
, min(item_datetime) as MinDate
from YourTable
group by
session_id
) sessions
left join
YourTable yt
on yt.session_id = sessions.session_id
order by
session.MinDate
, yt.item_datetime
答案 1 :(得分:1)
在我看来,你不想分组但只是排序没有? 所以:
SELECT item_id,item_datetime,app,action,session_id
FROM Table
ORDER BY app,item_datetime
答案 2 :(得分:0)
只需添加条款
即可ORDER BY `session_id` ASC , `item_datetime` ASC
到您的SQL查询
答案 3 :(得分:0)
你尝试过这样的事吗?
SELECT
*
FROM
yourTable
ORDER BY
app,
session_id,
item_datetime
这似乎是你所描述的,虽然你说你曾尝试过只使用ORDER BY?