Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Прошу помощи с запросом!  [new]
vovantiras
Member

Откуда:
Сообщений: 11
Добрый день! Помогите пожалуйста с запросом. Есть таблица test вида:
  DATA              VAL        RESULT
01.01.2010 0:00	    426
01.01.2010 0:15	    358
01.01.2010 0:30	    290
01.01.2010 0:45	    222
01.01.2010 1:00      154
01.01.2010 1:15	    86
01.01.2010 1:30	    18
01.01.2010 1:45	   222
01.01.2010 2:00	   300
01.01.2010 2:15	   145
01.01.2010 2:30	    20


Необходимо вычислить разницу между предыдущей строкой и текущей в поле VAL и записать ее в поле RESULT привязываясь к дате, а именно от даты текущей строки отнимать 15 мин.
Написал запрос:
USE Electro
DECLARE @Table TABLE (date datetime, val int, result int)
INSERT INTO @Table (date,val)   
SELECT date = date, val = val
FROM test
DECLARE @Time DATETIME
SET @Time = DATEADD(minute,-15,@Time)      
UPDATE test 
SET test.result = ISNULL(test.val-t1.val,0)
FROM @Table test
left JOIN @Table t1 on t1.date=test.date-@Time;
SELECT * From @Table


В таком виде в поле RESULT записываются 0, поправьте меня пожалуйста.
5 июн 14, 10:37    [16124265]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
TempFox
Guest
RESULT типа int ?
5 июн 14, 10:51    [16124344]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Подумайте, какой результат дает
test.date-@Time;
5 июн 14, 10:54    [16124355]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
vovantiras,

test.date-@Time
это Вы так 15 минут отнимаете, да?
А ничего, что целое число в данном случае - это количество дней?

Версия сервера какая?
5 июн 14, 10:54    [16124356]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
pacha
Member

Откуда:
Сообщений: 239
vovantiras, в вашем скрипте, где вы инициализируете переменную @Time?
5 июн 14, 10:54    [16124357]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
TempFox
Guest
Мне тоже такой запрос возвращает 0
select getdate(), DATEADD(minute, -15, getdate()), cast(getdate() - DATEADD(minute, -15, getdate()) as int)
5 июн 14, 10:54    [16124360]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
pacha
vovantiras, в вашем скрипте, где вы инициализируете переменную @Time?
+100
DECLARE @Time DATETIME
SET @Time = DATEADD(minute,-15,@Time)
Это от чего же, по-Вашему, отнимается 15 минут?
5 июн 14, 10:57    [16124368]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
vovantiras
Member

Откуда:
Сообщений: 11
iap,

2005
5 июн 14, 10:57    [16124370]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
vovantiras
Member

Откуда:
Сообщений: 11
TempFox,
да RESULT типа INT
5 июн 14, 10:58    [16124377]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
_human
Member

Откуда:
Сообщений: 560
vovantiras
left JOIN @Table t1 on t1.date=test.date-@Time;


left JOIN @Table t1 on t1.date=test.date-dateadd(minute, 15, test.date);
5 июн 14, 11:05    [16124419]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
TempFox
Guest
Попробуйте так минуты выделять:
select DATEPART(minute, getdate() - DATEADD(minute, -15, getdate()))
5 июн 14, 11:30    [16124622]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Переходите на SQL 2012 и используйте LAG
5 июн 14, 11:40    [16124706]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
UPDATE test 
SET test.result = ISNULL(test.val,0)-ISNULL((SELECT TOP(1)t1.val FROM @Table t1 WHERE t1.date<test.date ORDER BY t1.date DESC),0)
FROM @Table test;
5 июн 14, 11:40    [16124709]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
UPDATE test 
SET test.result = ISNULL(test.val,0)-ISNULL((SELECT TOP(1)t1.val FROM @Table t1 WHERE t1.date<test.date ORDER BY t1.date DESC),0)
FROM @Table test;
Подзапрос можно оформить в OUTER APPLY во FROMе
5 июн 14, 11:42    [16124723]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
vovantiras
Member

Откуда:
Сообщений: 11
iap
iap
UPDATE test 
SET test.result = ISNULL(test.val,0)-ISNULL((SELECT TOP(1)t1.val FROM @Table t1 WHERE t1.date<test.date ORDER BY t1.date DESC),0)
FROM @Table test;
Подзапрос можно оформить в OUTER APPLY во FROMе



Большое Спасибо!
5 июн 14, 11:48    [16124785]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом!  [new]
vovantiras
Member

Откуда:
Сообщений: 11
Всем откликнувшимся Спасибо!!!
5 июн 14, 11:51    [16124813]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить