Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
Вот столкнулся с такой задачей.
Имеем таблицу
IDТЕМПЕРАТУРАОСАДКИДАТА

Поле ДАТА содержит даты с 1995 по 2018 год. Необходимо сделать такую выборку:
AVG(ТЕМПЕРАТУРА), SUM(ОСАДКИ)... за периоды с ноября по март в общем периоде с 2000 по 2018 г., т.е. :

Должно быть в одном SQL запросе....
AVG(ТЕМПЕРАТУРА), SUM(ОСАДКИ) с 01.11.2000 по 01.03.2001 (т.е. тут идет группировка по этому диапазону)
AVG(ТЕМПЕРАТУРА), SUM(ОСАДКИ) с 01.11.2001 по 01.03.2002 (...то же)
AVG(ТЕМПЕРАТУРА), SUM(ОСАДКИ) с 01.11.2002 по 01.03.2003... и т.д.


Проблема именно с вытаскиванием данных по таким вот множественным диапазонам. Возможно ли сформировать запрос с такой сложной выборкой по датам.
Буду благодарен за помощь.
9 окт 18, 21:02    [21699728]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
Да еще забыл сказать, общий период может меняться, а неизменен только малый период (ноябрь-март).... вот потому и проблема, если бы общий период был статичен, то можно просто перечислить все через Between * And * Or Between * And *
9 окт 18, 21:33    [21699767]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#)) As A1, SUM(ОСАДКИ*-(Дата Between #11/01/2000# And #03/01/2001#) As S1,
и так далее...
9 окт 18, 21:50    [21699785]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
В Sum добавить правую закрывающую скобку.

Пишу с планшета, может, еще что пропущено...
9 окт 18, 21:52    [21699786]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 908
SELECT Диапазоны.Диапазон, AVG(Данные.Температура) As ttt, SUM(Данные.Осадки) As ooo
FROM Диапазоны INNER JOIN Данные ON (Данные.Дата Between Диапазоны.ДатаНачала AND Диапазоны.ДатаОкончания) 
Group by Диапазоны.Диапазон

Не?
9 окт 18, 21:59    [21699788]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
__Michelle,
спасибо, но во 2 сообщ. я написал, что общий период (2000-2018) будет меняться, неизменно только ноябрь-март

и что делает эта конструкция??
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))
... это что, из поля ТЕМПЕРАТУРА вычитается дата?

Так на всякий случай уточню:
В поле ТЕМПЕРАТУРА содерж. данные типа Single
В поле ОСАДКИ содерж. данные типа Long
В поле ДАТА содерж. данные типа Date
9 окт 18, 22:06    [21699800]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
Predeclared, спасибо
что имеется в виду под
SELECT Диапазоны.Диапазон

Имею такую таблицу: имя МЕТЕО
IDТЕМПЕРАТУРАОСАДКИ ДАТА
9 окт 18, 22:13    [21699814]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 908
bormman
... что имеется в виду ...

Таблица, описывающая диапазоны, отличные от стандартных (неделя, месяц, квартал, год).
9 окт 18, 22:22    [21699822]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman
__Michelle,
спасибо, но во 2 сообщ. я написал, что общий период (2000-2018) будет меняться, неизменно только ноябрь-март
От меня это не вскользнуло.
Именно это и учтено.
Вам нужно только продолжить текст запроса по аналогии с приведенной строкой, меняя значения границ периодов.
bormman
и что делает эта конструкция??
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))
... это что, из поля ТЕМПЕРАТУРА вычитается дата?
Нет, конечно.
Попробуйте выполнить запрос. А потом объясню, если потребуется.
Сейчас писать неудобно.
bormman
Так на всякий случай уточню:
В поле ТЕМПЕРАТУРА содерж. данные типа Single
В поле ОСАДКИ содерж. данные типа Long
В поле ДАТА содерж. данные типа Date
Спасибо.
Запрос с этим справится.
9 окт 18, 22:28    [21699828]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
@__Michelle
вот так ?
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#)) As A1, SUM(ОСАДКИ*-(Дата Between #11/01/2000# And #03/01/2001#) As S1, AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2001# And #03/01/2002#)) As A2, SUM(ОСАДКИ*-(Дата Between #11/01/2001# And #03/01/2002#) As S2.......
9 окт 18, 22:48    [21699837]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman
@__Michelle
вот так ?
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#)) As A1, 
SUM(ОСАДКИ*-(Дата Between #11/01/2000# And #03/01/2001#)) As S1, 
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2001# And #03/01/2002#)) As A2, 
SUM(ОСАДКИ*-(Дата Between #11/01/2001# And #03/01/2002#)) As S2.......

В принципе, так.
Но скобки нужно добавить, как сказано в 21699786.
Красным помечено.
9 окт 18, 22:57    [21699846]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman,

Попробуйте сначала на двух-трех диапазонах, чтобы скорость выполнения посмотреть.
9 окт 18, 23:04    [21699851]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
@__Michelle, спасибо что помогаете, однако....
может конечно я туплю, но как мне поможет такая конструкция если в ней так явно перечисляются диапазоны ? а если нужен будет диапазон с 2003 по 2005 то что тогда переписывать запрос под него? Да и если так явно перечислять то можно просто через Between.
9 окт 18, 23:05    [21699852]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
или каким-то образом будет отрабатывать только тот диапазон что я задам? :)
9 окт 18, 23:08    [21699854]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
@__Michelle
афигеть, таки да оно считает, правда выдает резалт в одну строку но считает.... какой интересный финт :)
поясните мне этот момент плиз AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))
9 окт 18, 23:22    [21699870]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman,

Так какой запрос все-таки нужен?

Вы же писали, что вроде один запрос должен возвращать 18 средних и 18 сумм
за 18 периодов: ноябрь2000-март2001, ноябрь2001-март2002, ...., ноябрь2017-март2018.

Или это не так?
9 окт 18, 23:26    [21699874]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman,

А зачем Вы мне @ прицепляете?
Это что-то значит?
9 окт 18, 23:28    [21699877]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))

ТЕМПЕРАТУРА умножается на результат логической операции сравнения (Дата Between #11/01/2000# And #03/01/2001#).
Если Дата в нужном диапазоне - результат равен -1 (минус единице).
Если нет - результат равен 0 (нулю).

То есть, получаем для каждой даты следующее:
либо ТЕМПЕРАТУРА*-(-1), то есть, просто ТЕМПЕРАТУРА,
либо ТЕМПЕРАТУРА*0, то есть, просто 0.
9 окт 18, 23:38    [21699888]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
__Michelle
автор
Это что-то значит?
значит адресовано __Michelle

автор
Так какой запрос все-таки нужен?

я ж выше написал - все работает ( [21699852] написано до выполнения SQL) , но я все еще не доганяю этого момента:
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))
9 окт 18, 23:39    [21699889]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
__Michelle
автор
То есть, получаем для каждой даты следующее:
либо ТЕМПЕРАТУРА*-(-1), то есть, просто ТЕМПЕРАТУРА,
либо ТЕМПЕРАТУРА*0, то есть, просто 0.

ага, вот оно что. Теперь ясно почему по осадкам работает ОК а по т-ре нет... при подсчете среднего 0 учитывается... надо как-то это обойти... может Nz?
9 окт 18, 23:44    [21699893]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
Считать среднее "вручную"?
Sum(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))/-Sum(Дата Between #11/01/2000# And #03/01/2001#) AS A1
9 окт 18, 23:52    [21699900]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
автор
Sum(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))/-Sum(Дата Between #11/01/2000# And #03/01/2001#) AS A1

Может не /-Sum a /-Count/// но все равно резалт не верен... хм
10 окт 18, 00:07    [21699914]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
bormman
Может не /-Sum a /-Count///
Нет.
10 окт 18, 00:15    [21699921]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6269
bormman,
как-то так (в запросе параметров дата в формате dd.mm.yyyy или dd.mm.yy)

К сообщению приложен файл (tmp.rar - 19Kb) cкачать
10 окт 18, 00:16    [21699923]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных по диапазону дат что входит в более широкий диапазон дат.  [new]
bormman
Member

Откуда:
Сообщений: 42
sdku,
dd.mm.yyyy
10 окт 18, 00:20    [21699924]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить