2016-02-10 152 views
0

我正在嘗試執行一個查詢,該查詢在30天內返回以下結果。可能有人請告訴我如何執行以下查詢說一個月?按設定的時間間隔每天計算一個月的SQL查詢

所以我想要的結果是日期時間字段的日常範圍,其中時間在第二天上午7點到上午7點之間。我在下面的查詢僅提供特定日期的數據。如果可能的話,我會在@start和@end之間的一段固定時間內使用它。

tagname |日期|導致

Declare @start date, @end date; 
set @start = '20160101'; 
set @end = '20160201'; 

select tagname, max(value) - min(value) as myRange 
from runtime.dbo.AnalogHistory 
where tagname = 'SALV_CV005_WX1_TOTAL.PVAI' and datetime between dateadd(hh,7,convert(datetime,@start)) and dateadd(hh,31,convert(datetime,@start)) 
group by TagName 

我想應該是低於

date | tagname | (daily range) 
1/1/16 | XXXX | 12354 
2/1/16 | XXXX | 2354 
3/1/16 | XXXX | etc 
+0

datetime是AnalogHistory表中的字段?如果是這樣,請將其包含在SELECT和GROUP BY子句中 –

回答

0

嘗試結果:

Declare @start date, @end date; 
set @start = '20160101'; 
set @end = '20163001'; 

select dateadd(DAY,0, datediff(day,0, datetime)) 
, tagname 
, max(value) - min(value) as myRange 
from runtime.dbo.AnalogHistory 
where tagname = 'SALV_CV005_WX1_TOTAL.PVAI' 
    and datetime between @start and @end 
group by TagName, dateadd(DAY,0, datediff(day,0, datetime)) 

使用的日期範圍和@啓動@end。 dateadd(DAY,0,datediff(day,0,datetime))將返回可分組的日期時間。

1

如果我理解正確,你需要一天在早上7:00開始。如果是這樣,那麼從日期/時間減去7小時後計算日期。如果您不關心索引:

Declare @start datetime, @end datetime; 
set @start = '20160101'; 
set @end = '20160201'; 

select cast(dateadd(hour, -7, datetime) as date) as thedate, 
     ah.tagname, max(ah.value) - min(ah.value) as myRange 
from runtime.dbo.AnalogHistory ah 
where ah.tagname = 'SALV_CV005_WX1_TOTAL.PVAI' and 
     cast(dateadd(hour, -7, datetime) as date) between @start and dateadd(day, 1, @end) 
group by cast(dateadd(hour, -7, datetime) as date), TagName 
order by thedate, tagname;