我有以下資料,其中每個人都可能有事件超時和事件超時資料,這些資料可以在同一日期多次出現,與下面代碼中為 Mike 記錄的日期相同。
DECLARE @vtable TABLE
(
Id Int NOT NULL,
Name VARCHAR(MAX) NOT NULL,
EventDate date NOT NULL,
EventTime time NOT NULL
);
INSERT INTO @vtable (Id, Name, EventDate, EventTime)
VALUES (1, 'Mike', '2022-10-10', '08:00'),
(2, 'Mike', '2022-10-10', '11:00'),
(3, 'Mike', '2022-10-10', '12:00'),
(4, 'Mike', '2022-10-10', '18:00'),
(5, 'Jen', '2022-10-10', '09:00'),
(6, 'Jen', '2022-10-10', '12:00'),
(7, 'Jen', '2022-10-11', '14:00'),
(8, 'Jen', '2022-10-11', '18:00')
我使用以下查詢進行了嘗試,但沒有得到所需的結果:
SELECT
Name, EventDate,
MIN(EventTime) AS In, MAX(EventTime) AS Out
FROM
@vtable
GROUP BY
Name, EventDate
我想得到這樣的結果:

uj5u.com熱心網友回復:
一個簡化的解決方案是使用適當的分組:
SELECT Name, EventDate, MIN(EventTime) AS [In], MAX(EventTime) AS [Out]
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name, EventDate ORDER BY Id) AS Rn
FROM @vtable
) t
GROUP BY Name, EventDate, (Rn - 1) / 2
ORDER BY Name, EventDate
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514566.html
上一篇:對包含重復項的資料子集進行排名
下一篇:在T-SQL中按類別選擇多個值
