Здравствуйте! Подскажите, пожалуйста, как корректно составить запрос/подзапрос в MS SQL?

Так был поставлен вопрос вчера.

UPD: Так описано более подробно.

В общем есть таблица с данными:
Дата-------------------------------Вес
2013-01-01 0:00:00------------100
2013-01-01 0:01:00------------150
2013-01-01 0:02:00------------130
2013-01-01 0:06:00------------0
2013-01-01 0:10:00------------90
2013-01-01 2:00:00------------200
2013-01-01 4:59:00------------100
2013-01-02 0:00:00------------300
2013-01-02 3:00:00------------400
2013-01-02 6:20:00------------500
2013-01-03 0:59:00------------100
2013-01-03 1:20:00------------300
2013-01-03 3:00:00------------400
2013-01-03 6:20:00------------500

Первый шаг: Найти сумму всех взвешиваний, сгруппировать по дате:



Получается:

Дата--------------------Вес
2013-01-01------------770
2013-01-02------------1200
2013-01-03------------1300

А теперь второй шаг: Надо, чтоб отображалось так:

2013-01-01------------770 (т.к. предыдущей даты нет, остаётся как была)
2013-01-02------------1970 (т.к. 1200 + 770 (сумма за предыдущую дату))
2013-01-03------------3270 (т.к. 1300 + 1970 (сумма за предыдущую дату))

Как я понимаю, необходимо написать подзапрос, в котором нужно найти сумму за предыдущий день и потом сложить её с суммой за обычный день. Т.е. как-то так, но код работает неправильно, т.к. неправильно записано условие в подзапросе:


Как мне это исправить?

P.S. Дата хранится в секундах, поэтому используется CONVERT(varchar, DATEADD(s, nb.TBreport.data, 25568), 102).

@темы: База данных, MS SQL

Комментарии
25.02.2013 в 11:16

Переформулируйте условие, ничего не понятно
26.02.2013 в 00:36

Forumsdk, Подкорректировала условие.
27.02.2013 в 00:43

не совсем понимаю сути проблемы, почему нельзя взять и сложить сразу сумму за текущий день и за предыдущий ? зачем вам какой то подзапрос ?
27.02.2013 в 11:59

fess2007, А как сделать проще без подзапроса? У меня просто больше идей нет, к сожалению.
28.02.2013 в 21:34

Если хотите чтобы вам помогли лучше всего выкладывать скрипты по созданию ваших таблиц, а лучше backup БД.

что такое s в вашем первом запросе ?
01.03.2013 в 01:01

fess2007,
CONVERT(varchar, DATEADD(s, nb.TBreport.data, 25568), 102)
s - second
nb.TBreport.data - поле, где дата хранится в секундах
25568 - кол-во дней 01.01.1970 0:00
Источник 1.
Источник 2.
01.03.2013 в 08:39

выложите бэкап БД