Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.656 c
1-1179831235
parasolka
2007-05-22 14:53
2007.08.05
Работа с несколькими мониторами.


2-1183923865
nali
2007-07-08 23:44
2007.08.05
virtual или dynamic metods


15-1183791993
Firefly
2007-07-07 11:06
2007.08.05
Ограничение доступа в Инет


2-1183974986
alles
2007-07-09 13:56
2007.08.05
BDE: Программно создавать новый алиас


15-1184069229
Вася Правильный
2007-07-10 16:07
2007.08.05
и мыло несуществующее у того варвара :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский