Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL запрос


Страницы:   1 2

Tonich ©   (2007-07-11 12:00:00) 

Привет...
помоги построить запрос...
есть данные в таблице -временные срезы показаний со счетчика. Они могут быть записанные через разный интервал времени, (час год, день неделя) так вот необходимо построить запрос который бы возвращал данные в определенном интервале (это уже сделал) и c  определенным шагом по времени (заданным пользователем, а не таким как он есть в базе)
спасибо...


clickmaker   (2007-07-11 14:45:00) [1]


> [22] Tonich ©   (11.07.07 14:42)

это MS SQL.
но вообще-то в этом запросе ничего особо специфичного нет, только вычисление разницы дат подставить вместо минуса
в MS SQL datediff(hour, d1, d2)
% - остаток от деления


Tonich   (2007-07-11 14:42:00) [2]


> clickmaker ©   (11.07.07 14:10) [19]

я синтаксиса MySQL не знаю
ну то есть в общем я понял что идет выборака между заданным интревалом

> % @interval = 0

а вот это что значить ?
@interval это помоему так обозначаются там переменные если я не ошибаюсь а % что там означает?


clickmaker   (2007-07-11 14:29:00) [3]


>  [20] Johnmen ©   (11.07.07 14:22)

почему? там надо что-то типа datediff еще добавить и всё


Johnmen   (2007-07-11 14:22:00) [4]


> clickmaker ©   (11.07.07 14:10) [19]

Это не то, что автору надо.


clickmaker   (2007-07-11 14:10:00) [5]


> [18] Tonich ©   (11.07.07 13:43)

так а чё, [10] не подходит?


Tonich   (2007-07-11 13:43:00) [6]


> Ибо очень как-то не верится, что данные будут заноситься
> ровно через час с точностью до секунды.

а никто и не утверждал что так будет на деле...


> хммм ну ща с импровизируем ))
> допустим вот такие вот есть данные в базе


ЮЮ   (2007-07-11 13:32:00) [7]


> что ж делать, если это недостаток выборки данных со счетчика?
> ?


Выполнить аппрокимацию по ближайщим данным до и ближайшим после после. Ибо очень как-то не верится, что данные будут заноситься ровно через час с точностью до секунды.

Или требованиея изложить иначе.
Например на данных

Есть

12/01/2007 15:32:25           15.3546
12/01/2007 22:35:25           15.7896

если шаг по времени скажет 3 часа надо получить следующие результаты

12/01/2007 15:32:25           15.3546
12/01/2007 18:32:25           ???
12/01/2007 21:32:25           ???


Tonich   (2007-07-11 13:22:00) [8]


> Desdechado ©   (11.07.07 13:15) [15]

ну правильно в некоторый шагай дынных просто не будет... а на что это повлияет???
то что не будет четкого временного шага между показанными данными???
то есть если я  укажу неделю, то каждая последующая запись должна отстоять на неделю...
по-моему тут нет проблемы, что ж делать, если это недостаток выборки данных со счетчика??


Desdechado   (2007-07-11 13:15:00) [9]

>  и как бы очевидно что шаг не может быть больше чем заданный интервал,
Зато в интервале может быть 5 шагов, в некоторых из которых данных просто нет.


Tonich   (2007-07-11 13:08:00) [10]


> А если у тебя в этом шаге не будет данных?

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

> А если внутри будет несколько?

несколько чего, несколько записей? ну и ради бога...

> А если что-то попадет на границу периода?

а вот это пока не решил...


Desdechado   (2007-07-11 13:02:00) [11]

> а я хочу задать определенный шаг по времени скажет 3 часа
> и получить следующие результаты
А если у тебя в этом шаге не будет данных?
А если внутри будет несколько?
А если что-то попадет на границу периода?


Johnmen   (2007-07-11 12:44:00) [12]


> Tonich ©   (11.07.07 12:37) [9]

В цикле выборки в заданном интервале времени анализируешь, надо ли включать тек.запись в результат на основании того, входит ли время тек.зап. в текущий "шаг". "Шаг", ес-но, наращивается в цикле.


Сергей М.   (2007-07-11 12:37:00) [13]


> Tonich ©   (11.07.07 12:27) [7]


> знаю какие функции надо задействовать я не знаю как
>


И какие же ?


clickmaker   (2007-07-11 12:37:00) [14]

на MS SQL я бы так написал

select t1.*
from tab t1
where isnull((t1.value - (select min(t2.value ) from tab t2 where t2.value < t1.value )), 0) % @interval = 0

диалекта IB не знаю


Tonich   (2007-07-11 12:37:00) [15]


> Johnmen ©   (11.07.07 12:32) [8]

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


Johnmen   (2007-07-11 12:32:00) [16]

>Tonich ©

Самое разумное - написать ХП.


Tonich   (2007-07-11 12:27:00) [17]


> Сергей М. ©   (11.07.07 12:21) [5]

совершенно верно


> MsGuns ©   (11.07.07 12:25) [6]

нет ну я не такой уж дилетант, я знаю какие функции надо задействовать я не знаю как


MsGuns   (2007-07-11 12:25:00) [18]

Help->Local SQL
Читать агрегатные операции, а также преобразование дат и синтаксис SELECT (Where .. BETWEEN в частности)


Сергей М.   (2007-07-11 12:21:00) [19]


> Tonich ©   (11.07.07 12:00)


Т.е. ты не хочешь тащить вседанные на клиента и уже там их фильтровать, а хочешь сформировать требуемый НД прямо на сервере.
Я правильно понял ?


Tonich   (2007-07-11 12:13:00) [20]

IB


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо