我有關于人們訪問某個地方的記錄的資料。有訪問的時間間隔。我想數一下什么時候有多少人。
例如玩具資料:
create table data ( id int, start_time datetime, end_time datetime);
insert into data values (1, '2019-11-06 09:32:00', '2019-11-06 09:41:00');
insert into data values (2, '2019-11-06 09:35:00', '2019-11-06 09:43:00');
我希望得到
start_time end_time count
2019-11-06 09:32:00 2019-11-06 09:35:00 1
2019-11-06 09:35:00 2019-11-06 09:41:00 2
2019-11-06 09:41:00 2019-11-06 09:43:00 1
如何在 SQL Server 中有效地實作這一點?
uj5u.com熱心網友回復:
似乎您需要做的是取消您的時間,使用LEAD, 獲得下一次,然后JOIN用新的“桶”重新回到您的表。對于我們擁有的示例資料,這有效:
WITH Times AS(
SELECT V.[Time] AS Start_Time,
LEAD(V.Time) OVER (ORDER BY V.Time) AS End_Time
FROM dbo.data d
CROSS APPLY (VALUES(d.start_time),(d.end_time))V([Time]))
SELECT T.Start_Time,
T.End_Time,
COUNT(d.id) AS [Count]
FROM Times T
LEFT JOIN dbo.data d ON d.start_time < T.End_Time
AND d.end_time > T.Start_Time
WHERE T.End_Time IS NOT NULL
GROUP BY T.Start_Time,
T.End_Time;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327562.html
標籤:sql sql-server 查询语句
上一篇:如何查看我的COALESCE陳述句的結果是從哪里檢索到的?
下一篇:與雪花中的條件相加
