2015-02-16 5 views
0

Я пытаюсь построить запрос в 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' 

Этот запрос не может работать в любом из аспектов того, что я описал, но в принципе это может сказать мне, если они были рано для одного конкретного дня

и мне нужно знать, если они были рано/late для каждого дня в диапазоне дат.

Любая помощь по этому вопросу было бы весьма признателен

+2

Do GROUP BY "date-without-time-part" и просто COUNT (*). – jarlh

+0

Почему вы делаете конвертировать в счет? – artm

+0

@artm no reason, он был там из более ранних тестов –

ответ

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'