Как подсчитать за каждый день между определенными временами - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь получить общий счет за каждый день с 07:00 до 19:00 за последние 7 дней. Приведенный ниже запрос отображает только счет за дату 7 дней назад, а не за каждый отдельный день. Любая помощь будет принята с благодарностью. Спасибо!

DECLARE @Date AS DATETIME = DATEADD(HOUR, 7, CAST(CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS DATETIME))
DECLARE @Date2 AS DATETIME = DATEADD(HOUR, 19, CAST(CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS DATETIME))

SELECT CONVERT(NVARCHAR(20), DATE, 120) AS Report_Date, COUNT(DISTINCT GUID) AS ROW_COUNT
FROM TABLE WITH (NOLOCK)
WHERE DATEADD(MINUTE, +270, DATE) >= @Date
AND DATEADD(MINUTE, +270, DATE) < @Date2
GROUP BY CONVERT(NVARCHAR(20), DATE, 120)

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Так как вам нужно больше последних 7 дней, используйте getdate () - 7

SELECT CAST(DATE as DATE) AS Report_Date,
           COUNT(DISTINCT GUID) AS ROW_COUNT
    FROM t 
    WHERE DATEPART(HOUR, DATE) >= 7 AND
          DATEPART(HOUR, DATE) < 19
          and CAST(DATE as DATE)>=getdate()-7 and CAST(DATE as DATE)<=getdate()
    GROUP BY CAST(DATE as DATE)
    ORDER BY CAST(DATE as DTE)
0 голосов
/ 06 сентября 2018
;With T AS
(
    SELECT CAST(DATE as DATE) AS Report_Date,COUNT(DISTINCT GUID) AS ROW_COUNT
    FROM tbl 
    WHERE 
    DATEPART(HOUR, DATE) >= 7 AND     DATEPART(HOUR, DATE) < 19
)
SELECT Report_date,Row_Count From T GROUP BY Report_date
ORDER BY Report_date
0 голосов
/ 06 сентября 2018

Не преобразовывать столбцы даты в даты. Используйте функции даты. Я не понимаю, почему вы добавляете 270 минут к дате.

Я бы пошел на более прямой ответ на ваш вопрос:

SELECT CAST(DATE as DATE) AS Report_Date,
       COUNT(DISTINCT GUID) AS ROW_COUNT
FROM TABLE 
WHERE DATEPART(HOUR, DATE) >= 7 AND
      DATEPART(HOUR, DATE) < 19
GROUP BY CAST(DATE as DATE)
ORDER BY CAST(DATE as DTE)
...