Форум: "Начинающим";
Текущий архив: 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