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

Откуда:
Сообщений: 3
Здравствуйте!
Помогите, пожалуйста написать запрос.

Есть таблица вида
ДатаТемпература
9.12.201225
10.12.201223
11.12.201221
12.12.201219
13.12.201221
14.12.201222


Нужно написать запрос, который бы выбирал данные начиная с 10.12.2012, пока температура > 20, т.е. вернул бы

ДатаТемпература
10.12.201223
11.12.201221


Я так понимаю, что при выборке каждую новую строку надо сравнивать с условием и остановить запрос, когда условие не выполняется, но как это сделать?
19 сен 12, 07:23    [13185988]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
как-то так
declare @t table(dt date, temperature int)

insert into @t (dt, temperature) values 
('20121209', 25),
('20121210', 23),
('20121211', 21),
('20121212', 19),
('20121213', 21),
('20121214', 22)

declare @dt date = '20121210'

select *
from @t t
where dt between @dt and (select top (1) dt from @t t1 where t1.dt > @dt and t1.temperature <= 20) 
	and t.temperature > 20
19 сен 12, 08:06    [13186049]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
ovtia
Member

Откуда:
Сообщений: 3
HandKot,
Спасибо за быстрый ответ, Ваш запрос работает.

Но можно еще узнать: можно ли как-то контролировать данные по мере их выборки?

Нужно это допустим, если пользователь ошибается с датой, т.е. нередки случаи когда на дату начала выборки приходится температура как раз < 20 или там 0 (термометр, допустим, отключен).

Тогда такой запрос вернет только первую строку.

Конечно я могу написать что-то вроде:

declare @dt date = '20121210'

IF (SELECT Температура FROM Таблица WHERE Дата = @dt) < 20 ...

Но мне интересно можно ли как-то включать/исключать данные по мере работы выборки?
19 сен 12, 09:17    [13186268]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
ovtia
Тогда такой запрос вернет только первую строку.

запрос вернет только записи с температурой больше 20 за указанный диапозон

ovtia
Но можно еще узнать: можно ли как-то контролировать данные по мере их выборки?

Нужно это допустим, если пользователь ошибается с датой, т.е. нередки случаи когда на дату начала выборки приходится температура как раз < 20 или там 0 (термометр, допустим, отключен).

напишите пример данных, а то не понял
19 сен 12, 10:30    [13186755]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
aleks2
Guest
select *
from @t t
where dt between (select top (1) dt from @t t1 where t1.dt >= @dt and t1.temperature >= 20 order by t1.dt ASC) 
         and (select top (1) dt from @t t1 where t1.dt > (select top (1) dt from @t t1 where t1.dt > @dt and t1.temperature >= 20 order by t1.dt ASC) and t1.temperature <= 20 order by t1.dt ASC) 
	and t.temperature > 20
19 сен 12, 12:07    [13187784]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
ovtia
Member

Откуда:
Сообщений: 3
HandKot, aleks2
Спасибо за помощь.

Но мне все же интересно:
ovtia
Но мне интересно можно ли как-то включать/исключать данные по мере работы выборки?


Т.е. сравнивать каждую строку выборки с условием?
19 сен 12, 12:17    [13187899]     Ответить | Цитировать Сообщить модератору
 Re: Включать данные в запрос пока они удовлетворяют условию  [new]
aleks2
Guest
ovtia
HandKot, aleks2
Спасибо за помощь.

Но мне все же интересно:
ovtia
Но мне интересно можно ли как-то включать/исключать данные по мере работы выборки?


Т.е. сравнивать каждую строку выборки с условием?


У вас болезнь императивных программистов.
Мыслить надо декларативно, т.е. описывать РЕЗУЛЬТАТ, а не способ его получения.

Осознайте эту незатейливую истину и вам полегчает.
19 сен 12, 12:50    [13188208]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить