[英]Create an Attendance view from one column timesheet (SQL Server 2008 R2)
我有來自SQL Server的出勤數據,我必須將其分為2列(進出)。
這是一個例子:
這就是我想要的結果
查詢:
CREATE TABLE [dbo].[Table1]
(
[ID] [varchar](50) NULL,
[DATETIME] [datetime] NULL,
[Flag] [int] NULL
)
INSERT INTO table1
VALUES ('ID-1', '2019-03-13 09:48:00.000', '2'),
('ID-1', '2019-03-13 09:48:00.000', '2'),
('ID-1', '2019-03-13 18:11:00.000', '3'),
('ID-1', '2019-03-13 18:11:00.000', '3'),
('ID-1', '2019-03-14 02:00:00.000', '3'),
('ID-1', '2019-03-14 09:54:00.000', '2'),
('ID-1', '2019-03-14 09:54:00.000', '2'),
('ID-1', '2019-03-14 09:54:00.000', '2'),
('ID-1', '2019-03-14 22:00:00.000', '3'),
('ID-1', '2019-03-14 22:00:00.000', '3'),
('ID-1', '2019-03-14 22:00:00.000', '3'),
('ID-1', '2019-03-15 13:55:00.000', '2'),
('ID-1', '2019-03-15 13:55:00.000', '2'),
('ID-1', '2019-03-15 13:55:00.000', '2'),
('ID-1', '2019-03-15 13:55:00.000', '2'),
('ID-1', '2019-03-15 13:55:00.000', '2'),
('ID-1', '2019-03-15 22:00:00.000', '3'),
('ID-1', '2019-03-15 22:00:00.000', '3'),
('ID-1', '2019-03-15 22:00:00.000', '3'),
('ID-1', '2019-03-15 22:00:00.000', '3')
注意:
標志2表示IN,3表示OUT。
可以有多個簽入和簽出,所以我們必須先入后出。
可能會有加班,因此有時我們必須從第二天開始檢查結帳數據。
我怎樣才能做到這一點?
也許嘗試從Ins到outs的左聯接,並找到該intime之后最早的時間。
以下示例(未試用):
WITH ins
AS ( SELECT *
FROM table1
WHERE Flag = 2 )
,outs
AS ( SELECT *
FROM table1
WHERE Flag = 3 )
SELECT i.ID
,i.DATETIME InTime
,MIN(o.DATETIME) OutTime
FROM ins i
LEFT JOIN outs o ON o.ID = i.ID AND o.DATETIME > i.DATETIME -- out must be later than in
GROUP BY i.ID
,i.DATETIME
,i.Flag;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.