计算一个值的次数

时间:2015-02-16 12:00:02

标签: sql sql-server

我正在尝试在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'

这个查询在我所描述的任何方面都没有真正起作用,但基本上这可以告诉我他们是否在某一特定日期提前

我需要知道他们是否在日期范围内每天早/晚。

非常感谢对此的任何帮助

1 个答案:

答案 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'