如何获取特定时间之间每天的计数

时间:2018-09-06 11:32:47

标签: sql sql-server tsql

我正在尝试获取过去7天每天07:00至19:00之间的每一天的总数。以下查询仅显示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 :(得分:1)

由于您需要过去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)

答案 1 :(得分:0)

不将日期列转换为日期。使用日期功能。我不明白您为什么要增加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)

答案 2 :(得分:-1)

;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