确定时间间隔

Determine a time interval

我尝试在 SSRS 中创建一个图表,它应该只显示周日晚上 10 点到晚上 11 点的值。

我的查询:

select intervaldateweek as Week,
       SUM(GoodUnits) As GoodUnits,
       SUM(NetUnits) As NetUnits,
       SUM(GoodUnits)  / NULLIF(SUM(NetUnits) , 0.0)* 100 As Value
from Count
    inner join tsystem ON Count.systemid = tsystem.ID
where IntervalDate >= getdate()-300
  and tsystem.ID = 2 
group by intervaldate

我用这个表达式试过只得到星期天:

(DATEPART(dw, IntervalDate) = 1

但我不知道如何确定特定的时间间隔。在这种情况下,晚上 10 点 - 晚上 11 点。

我需要这个时间段之间的值

在 22:00:00 到 23:00:00

之间
 IntervalDate >= DATEADD(HOUR, 1,CAST(DATEADD(DAY,0, CAST(GETDATE() AS DATE)) AS DATETIME))
    AND IntervalDate <= DATEADD(HOUR, 22, CAST(CAST(GETDATE() AS DATE) AS DATETIME))

我用这个表达式试过了,但我想我在表达式中设置了错误的数字。

您可以使用以下行..

DATEPART(dw,GETDATE()) = 1 AND CAST(GETDATE() AS TIME(0)) BETWEEN CAST('22:00:00' AS TIME(0)) AND CAST('23:00:00' AS TIME(0))

不需要用那种东西

试试这个

 select intervaldateweek as Week,
   SUM(GoodUnits) As GoodUnits,
   SUM(NetUnits) As NetUnits,
   SUM(GoodUnits)  / NULLIF(SUM(NetUnits) , 0.0)* 100 As Value
from Count
inner join tsystem ON Count.systemid = tsystem.ID
where DATEPART(dw,intervaldate) = 1 AND CAST(intervaldate AS TIME(0))
BETWEEN CAST('22:00:00' AS TIME(0)) AND CAST('23:00:00' AS TIME(0))
and tsystem.ID = 2
group by intervaldate

您可以使用 DATEPART 函数 (documentation here) 查看相关部分,例如日期时间值的小时。例如:

SELECT 
    intervaldateweek AS [Week],
    SUM(GoodUnits) AS GoodUnits,
    SUM(NetUnits) AS NetUnits,
    SUM(GoodUnits) / NULLIF(SUM(NetUnits), 0.0)* 100 AS Value
FROM 
    [Count]
    INNER JOIN tsystem ON [Count].systemid = tsystem.ID
WHERE 
    DATEPART(WEEKDAY,intervaldate) = 1 /* See note about SET DATEFIRST */
    AND DATEPART(HOUR, intervaldate) = 22
    AND tsystem.ID = 2
GROUP BY
    intervaldateweek

注意:使用 DATEPART(WEEKDAY, ...) 函数时,请务必了解您的服务器配置,因为有时星期日为 1,而其他时候星期日为 7。您可以使用 SET DATEFIRST 1 等强制设置使其可预测。详情请参阅此MSDN link

PS:您的 select 语句按 intervaldate 分组,但您的列列表使用 intervaldateweek,这是行不通的。我假设分组依据是 intervaldateweek.