确定时间间隔
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
.
我尝试在 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
.