Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

SQL запрос   Найти похожие ветки 

 
Tonich ©   (2007-07-11 12:00) [0]

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


 
Johnmen ©   (2007-07-11 12:06) [1]

Пример исходных данных и желаемых результатов - в студию.


 
ЮЮ ©   (2007-07-11 12:09) [2]

и какая база данных - ту да же.


 
Tonich ©   (2007-07-11 12:13) [3]

хммм ну ща с импровизируем ))

допустим вот такие вот есть данные в базе
Время            показания

12/01/2007 15:32:25           15.3546
12/01/2007 16:32:25           15.3546
12/01/2007 17:32:25           15.3546
12/01/2007 18:32:25           15.3546
12/01/2007 19:32:25           15.3546
12/01/2007 20:32:25           15.3546
12/01/2007 21:32:25           15.3546
12/01/2007 22:32:25           15.3546

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

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

ну точно так же и неделями месяцами годами..минутами…


 
Tonich ©   (2007-07-11 12:13) [4]

IB


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


> Tonich ©   (11.07.07 12:00)


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


 
MsGuns ©   (2007-07-11 12:25) [6]

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


 
Tonich ©   (2007-07-11 12:27) [7]


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

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


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

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


 
Johnmen ©   (2007-07-11 12:32) [8]

>Tonich ©

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


 
Tonich ©   (2007-07-11 12:37) [9]


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

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


 
clickmaker ©   (2007-07-11 12:37) [10]

на 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 не знаю


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


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


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


И какие же ?


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


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

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


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

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


 
Tonich ©   (2007-07-11 13:08) [14]


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

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

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

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

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

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


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

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


 
Tonich ©   (2007-07-11 13:22) [16]


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

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


 
ЮЮ ©   (2007-07-11 13:32) [17]


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


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

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

Есть

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:43) [18]


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

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


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


 
clickmaker ©   (2007-07-11 14:10) [19]


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

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


 
Johnmen ©   (2007-07-11 14:22) [20]


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

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


 
clickmaker ©   (2007-07-11 14:29) [21]


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

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


 
Tonich ©   (2007-07-11 14:42) [22]


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

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

> % @interval = 0

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


 
clickmaker ©   (2007-07-11 14:45) [23]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
15-1183913928
b52
2007-07-08 20:58
2007.08.05
закладка компоненты lblPath и Edtfile


15-1183970292
dr Gonzo
2007-07-09 12:38
2007.08.05
Качество Freelance


4-1171734916
XMaC
2007-02-17 20:55
2007.08.05
MSGina Wrapper: "I Need Help..."


2-1183452102
Ivolg
2007-07-03 12:41
2007.08.05
Подсветка параметров функции


15-1183615251
Predfer
2007-07-05 10:00
2007.08.05
У кого какой антивирус?