create table #temp (counter int identity not null, summa float)
insert into #temp .....
delete from #temp where summa is null
Как составить запрос
Есть MS SQL 2000. Есть таблица create table #temp(summa float). Допустим в ней такие данные:
23
15
7
6
14
9
43
26
Нужно вычислить количество снижений значения поля summa меньше 10. Т.е. при этих данных будет 2 снижения (с 15 до 7 и с 14 до 9). Я мог бы конечно открыть курсор по таблице, но не хотелось-бы.
Я вижу только один путь - цикл.
Тобишь курсор. Чего-бы не хотелось. Я где-то встречал похожее решение. Там надо было вычислить разницу между соседними записями. Это было соединение таблицы самой с собой. Здесь что-то такое напрашивается.
Ну я добавил столбец identity еще.
Код:
Получаем таблицу
counter | summa
2 | 23
3 | 15
5 | 7
7 | 6
8 | 14
11 | 9
12 | 43
13 | 26
А почему не устраивает курсор, ведь если ему установить опции рид_онли,статик, форвард_онли,локал, то он будет довольно быстро работать...
В общем либо с курсором, либо без, мое мнение - по-любому цикл.
Согласен... Одним обычным запросом тут пожалуй никак. Пиши хранимую процедуру и там в цикле все по временной таблице.
А почему не устраивает курсор, ведь если ему установить опции рид_онли,статик, форвард_онли,локал, то он будет довольно быстро работать...
В общем либо с курсором, либо без, мое мнение - по-любому цикл.[/QUOTE]
Нашел на другом форуме решение:
Код:
select
count(*)
from
#temp t1
where
t1.summa >= 10 and (select top 1 summa from #temp where counter > t1.counter) < 10
count(*)
from
#temp t1
where
t1.summa >= 10 and (select top 1 summa from #temp where counter > t1.counter) < 10
Как раз то что нужно. Ведь помнил же что обычным запросом можно!
Спасибо! Хороший способ, возьмем на вооружение! Действительно можно без циклов =)
да. вернет 1. т.е. было одно снижение суммы, которое перевалило рубеж в 10.