2016-02-02 2 views
0

Я пытаюсь выполнить запрос, который запрашивает значение тега и принимает диапазон значения в течение 24-часового периода (7am-7am) и получает данные за определенный промежуток времени. Я пробовал следующий запрос, и я получаю нулевые результаты по какой-то причине. Я знаю, что есть данные в этой области, так как я могу запускать запрос отдельно, и он отлично работает.Внутренний SQL-запрос

Не могли бы вы проконсультироваться?

select tagname, convert(date, datetime), 
    (select (max(ah2.Value) - min(ah2.Value)) 
    from Runtime.dbo.AnalogHistory ah2 
    where ah2.TagName = 'LS_CV004_WX1_PROD_DATA.Actual_Input' and 
      ah2.DateTime BETWEEN dateadd(hour, 7, convert(datetime, convert(date, ah.datetime))) AND 
         dateadd(hour, 31, convert(datetime, convert(date, ah.datetime))) 

    ) as Production 
from runtime.dbo.analoghistory ah 
where ah.TagName = 'LS_CV004_WX1_PROD_DATA.Actual_Input' or 
    ah.datetime between '20151101' and '20151201' 
group by ah.tagname, convert(date, ah.DateTime),ah.value; 

Запрос на один день. Это возвращает единственный результат

select (max(ah2.Value) - min(ah2.Value)) 
    from Runtime.dbo.AnalogHistory ah2 
    where ah2.TagName = 'LS_CV004_WX1_PROD_DATA.Actual_Input' and 
      ah2.DateTime BETWEEN dateadd(hour, 7, convert(datetime, convert(date, '20151201'))) AND 
         dateadd(hour, 31, convert(datetime, convert(date, '20151201'))) 

В предопределенное поле даты

select tagname, convert(date, datetime),value 
from runtime.dbo.analoghistory ah 
where ah.TagName = 'LS_CV004_WX1_PROD_DATA.Actual_Input' or 
    ah.datetime between '20151101' and '20151201' 
group by tagname, convert(date, ah.DateTime),Value; 



LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-01 7219619.5 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-01 7227095 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-01 7231152 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-01 7238661 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-02 7245601.5 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-02 7249393.5 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-02 7256899 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-03 7264266.5 
LS_CV004_WX1_PROD_DATA.Actual_Input 2015-11-03 7268411.5 

Любая помощь высоко ценится.

Спасибо

ответ

1
DECLARE @today DATETIME, @today_at_1615 DATETIME; 

SELECT @today = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0), 
     @today_at_1615 = DATEADD(MINUTE, 07.00*60, @today); 

SELECT tagname, convert(date, datetime),value 
from runtime.dbo.analoghistory ah 
where ah.TagName = 'LS_CV004_WX1_PROD_DATA.Actual_Input' and 
ah.datetime > DATEADD(DAY, -1, @today_at_1615) 
    AND ah.datetime <= @today_at_1615 
group by tagname, convert(date, ah.DateTime),Value; 
0

В запросе, вы ищете ряд из ah2 что 7-31 часов после строки из ах. Вывод из вашего последнего запроса показывает, что строки существуют в ах с датами 11/01, 11/02 и 11/03, но не 12/01. Второй запрос показывает, что строки существуют в ah2, которые через 7-31 часов после 12/01. Если вы не усекаете результаты последнего запроса, я не обязательно буду ожидать, что первый запрос вернет любые данные.

Смежные вопросы