![]() |
|
Модераторы: LSD |
![]()
|
|
| al583 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.6.2012 Репутация: нет Всего: нет |
Добрый вечер,форумчане.
Помогите мне реализовать такой запрос. Вот суть задачи,ниже наброски решения: В базе данных системы сбора метеорологической информации «Гидрометцентра России» для хранения показаний температуоы воздуха используется таблица indication (рис.1), состоящая из двух столбцов: 1) moment (тип DATE) - момент снятия показаний, первичный ключ; 2) value (тип NUMBER) - температура воздуха (по шкале Цельсия). Задача: Написать запрос для определения средневзвешенной* температуры за март 2011 года (при условии, что между показаниями температура изменяется линейно - монотонно, рис.2). На входе: дата начала периода и дата окончания периода. На выходе: число. * Средневзвешенная температура - это среднее значение температуры с учетом периода действия показания. Т.е., если есть показания: 01.07.2010 — 35 ОС, 11.07.2010 — 30 ОС, 21.07.2010 — 25 ОС, 01.08.2010 — 20 ОС, то средневзвешенная температура за июль 2010 года равна ( (35 ОС+30ОС )/2 * 10дн. + (30 ОС +25 ОС )/2 * 10дн + (25 ОС+20 ОС)/2 * 11) / 31дн. = 27,34 ОС Вот есть пару набросков,но как-то надо их соед-ть в 1 красивый запрос)
Присоединённый файл ( Кол-во скачиваний: 1 )
Bilet2__1_.doc 54,00 Kb |
|||
|
||||
| al583 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.6.2012 Репутация: нет Всего: нет |
Всем спасибо, сделал сам
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Вроде как-то так.
Мог накосячить где-то в расчетах, надо бы вдумчиво потестить
Здесь первый подзапрос - преобразует данные к виду даты с - по, значения от - до Второй подзапрос - отсекает данные вне интересующего нас диапазона выборки, подставляет вместо дат граничные значения в случае, если первому/последнему дню выборки нет точного сопоставления в исходных данных, дорасчитывает значения для граничных дней выборки исходя из условия линейного изменения показателя в течении времени Третий подзапрос - считает средневзвешенную. Это сообщение отредактировал(а) Zloxa - 25.6.2012, 09:45 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| al583 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.6.2012 Репутация: нет Всего: нет |
у меня вроде так:
select SUM(Delta)/31 FROM (select moment, value, value*(TRUNC(LEAD(moment, 1) OVER (ORDER BY moment))-TRUNC(moment)) as Delta FROM indication) where moment BETWEEN '01.01.2011' AND '31.01.2011'; |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
У вас: т.е. периоды, как бы могут быть произвольными. Я правильно понимаю? Тогда делить на 31 нельзя, ибо период может быть вовсе 31 день. Так? Ну и, я так понимаю, никто не обещает, что на дату начала определяемого пользователем периода и на дату, следующую за конечной датой, определенной пользователем периода, в таблице обязана присутствовать запись. Вполне может статься, что вы имеете записи за 10 декабря 10 года, 10 января 11го года и 10 февраля 11го года, в этом случае, посчитанная вами средневзвешенная покажет цены на дрова. нет? Более того. Вы суммируете значение измерения на начало интервала умноженное на количество дней, а не среднеарифметическое от значения на начале интервала, и конца, как у вас указано в задании. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| al583 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.6.2012 Репутация: нет Всего: нет |
Спорить не буду, наверное так и есть
|
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |