我正在尝试在MSSQL中构建一个查询某个人迟到多少次的查询,例如,一个人每天可能有4条记录,例如,晚餐,晚餐,离开。
作为一个简单的例子,假设“到达”时间是上午9:15,预计到达时间是上午9点,这将被视为迟到,但如果我需要检查说数周的数据,所以5天,理想情况下将是20条记录,每4条记录将是我们需要计算的记录。但是数据不是那么可靠,因为这一切都归功于系统刷卡的用户。
这样做的最佳方法是什么?
SELECT COUNT(EventTM) AS Time
FROM
CHINA_VISION_DorEvents
WHERE
(CardCode = '007b8a5a')
AND (DorCtrls_Ref = '16')
AND (EventTM >= DATEADD(hour, 0, DATEADD(day, 0, CAST(CAST(GETDATE() AS date) AS datetime))))
And convert(Time,EventTM) < '08:08:00'
这个查询在我所描述的任何方面都没有真正起作用,但基本上这可以告诉我他们是否在某一特定日期提前
我需要知道他们是否在日期范围内每天早/晚。
非常感谢对此的任何帮助
答案 0 :(得分:0)
尝试这样的事情。
DECLARE @MyTable TABLE
(
id INT IDENTITY(1, 1),
name VARCHAR(50),
Action VARCHAR(50),
Date_of_action DATETIME
)
INSERT INTO @MyTable
VALUES ('Aaa',
'Arriving',
'1-Jan-2015 9:00:00 AM'),
('Aaa',
'Dinner',
'1-Jan-2015 11:00:00 AM'),
('Aaa',
'Dinner',
'1-Jan-2015 2:00:00 PM'),
('Aaa',
'Leaving',
'1-Jan-2015 6:00:00 PM'),
('Aaa',
'Arriving',
'2-Jan-2015 9:15:00 AM'),
('Aaa',
'Dinner',
'2-Jan-2015 11:00:00 AM'),
('Aaa',
'Dinner',
'2-Jan-2015 2:00:00 PM'),
('Aaa',
'Leaving',
'2-Jan-2015 6:00:00 PM'),
('Aaa',
'Arriving',
'3-Jan-2015 9:00:00 AM'),
('Aaa',
'Dinner',
'3-Jan-2015 11:00:00 AM'),
('Aaa',
'Dinner',
'3-Jan-2015 2:00:00 PM'),
('Aaa',
'Leaving',
'3-Jan-2015 6:00:00 PM'),
('Aaa',
'Arriving',
'4-Jan-2015 9:00:00 AM'),
('Aaa',
'Dinner',
'4-Jan-2015 11:00:00 AM'),
('Aaa',
'Dinner',
'4-Jan-2015 2:00:00 PM'),
('Aaa',
'Leaving',
'4-Jan-2015 6:00:00 PM'),
('Aaa',
'Arriving',
'5-Jan-2015 9:00:00 AM'),
('Aaa',
'Dinner',
'5-Jan-2015 11:00:00 AM'),
('Aaa',
'Dinner',
'5-Jan-2015 2:00:00 PM'),
('Aaa',
'Leaving',
'5-Jan-2015 6:00:00 PM'),
('Baa',
'Arriving',
'1-Jan-2015 9:00:00 AM'),
('Baa',
'Dinner',
'1-Jan-2015 11:00:00 AM'),
('Baa',
'Dinner',
'1-Jan-2015 2:00:00 PM'),
('Baa',
'Leaving',
'1-Jan-2015 6:00:00 PM'),
('Baa',
'Arriving',
'2-Jan-2015 9:00:00 AM'),
('Baa',
'Dinner',
'2-Jan-2015 11:00:00 AM'),
('Baa',
'Dinner',
'2-Jan-2015 2:00:00 PM'),
('Baa',
'Leaving',
'2-Jan-2015 6:00:00 PM'),
('Baa',
'Arriving',
'3-Jan-2015 9:00:00 AM'),
('Baa',
'Dinner',
'3-Jan-2015 11:00:00 AM'),
('Baa',
'Dinner',
'3-Jan-2015 2:00:00 PM'),
('Baa',
'Leaving',
'3-Jan-2015 6:00:00 PM'),
('Baa',
'Arriving',
'4-Jan-2015 9:00:00 AM'),
('Baa',
'Dinner',
'4-Jan-2015 11:00:00 AM'),
('Baa',
'Dinner',
'4-Jan-2015 2:00:00 PM'),
('Baa',
'Leaving',
'4-Jan-2015 6:00:00 PM'),
('Baa',
'Arriving',
'5-Jan-2015 9:00:00 AM'),
('Baa',
'Dinner',
'5-Jan-2015 11:00:00 AM'),
('Baa',
'Dinner',
'5-Jan-2015 2:00:00 PM'),
('Baa',
'Leaving',
'5-Jan-2015 6:00:00 PM')
SELECT t.name as LateCommersList,t.Date_of_action
FROM (SELECT Name,
date_of_Action,
ROW_NUMBER()
OVER (
partition BY CONVERT(DATE, date_of_action)
ORDER BY name, date_of_Action) rn
FROM @MyTable)t
WHERE rn = 1
AND CONVERT(TIME(7), Date_of_action) > '9:00:00.0000000'