2016-03-03 93 views
1

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

我这个表情尝试过,但我想我的设置表情中的虚假麻木。

回答

0

可以使用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:您的选择语句组由intervaldate,但您的列表使用intervaldateweek这将无法正常工作。我打算假定这个小组的意图是intervaldateweek

+0

谢谢,我会检查它 – mayo

0

你可以使用下面的行..

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)) 

没有必要使用那种东西。

+0

更换GETDATE()由intervaldate .. –

+0

感谢您的帮助,但是这表明我没有数据 – mayo

+0

你更换GETDATE –

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 
+0

不幸的是这不是工作,无数据资料 – mayo

+0

的日期是像这样保存在数据库中这里:“2016-02-22 22:00:00.000” – mayo

+0

你使用的是什么版本? –