powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Группировка данных по диапазону дат что входит в более широкий диапазон дат.
46 сообщений из 46, показаны все 2 страниц
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715160
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот столкнулся с такой задачей.
Имеем таблицу
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... и т.д.

Проблема именно с вытаскиванием данных по таким вот множественным диапазонам. Возможно ли сформировать запрос с такой сложной выборкой по датам.
Буду благодарен за помощь.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715178
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да еще забыл сказать, общий период может меняться, а неизменен только малый период (ноябрь-март).... вот потому и проблема, если бы общий период был статичен, то можно просто перечислить все через Between * And * Or Between * And *
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715185
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#)) As A1, SUM(ОСАДКИ*-(Дата Between #11/01/2000# And #03/01/2001#) As S1,
и так далее...
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715186
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Sum добавить правую закрывающую скобку.

Пишу с планшета, может, еще что пропущено...
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715187
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT Диапазоны.Диапазон, AVG(Данные.Температура) As ttt, SUM(Данные.Осадки) As ooo
FROM Диапазоны INNER JOIN Данные ON (Данные.Дата Between Диапазоны.ДатаНачала AND Диапазоны.ДатаОкончания) 
Group by Диапазоны.Диапазон


Не?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715192
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
спасибо, но во 2 сообщ. я написал, что общий период (2000-2018) будет меняться, неизменно только ноябрь-март

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

... это что, из поля ТЕМПЕРАТУРА вычитается дата?

Так на всякий случай уточню:
В поле ТЕМПЕРАТУРА содерж. данные типа Single
В поле ОСАДКИ содерж. данные типа Long
В поле ДАТА содерж. данные типа Date
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715198
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared, спасибо
что имеется в виду под
Код: sql
1.
SELECT Диапазоны.Диапазон


Имею такую таблицу: имя МЕТЕО
IDТЕМПЕРАТУРАОСАДКИ ДАТА
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715201
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman... что имеется в виду ...
Таблица, описывающая диапазоны, отличные от стандартных (неделя, месяц, квартал, год).
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715204
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman __Michelle,
спасибо, но во 2 сообщ. я написал, что общий период (2000-2018) будет меняться, неизменно только ноябрь-март От меня это не вскользнуло.
Именно это и учтено.
Вам нужно только продолжить текст запроса по аналогии с приведенной строкой, меняя значения границ периодов.
bormmanи что делает эта конструкция??
Код: sql
1.
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))

... это что, из поля ТЕМПЕРАТУРА вычитается дата? Нет, конечно.
Попробуйте выполнить запрос. А потом объясню, если потребуется.
Сейчас писать неудобно.
bormmanТак на всякий случай уточню:
В поле ТЕМПЕРАТУРА содерж. данные типа Single
В поле ОСАДКИ содерж. данные типа Long
В поле ДАТА содерж. данные типа Date Спасибо.
Запрос с этим справится.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715210
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@ __Michelle
вот так ?
Код: sql
1.
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.......
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715213
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman@ __Michelle
вот так ?
Код: sql
1.
2.
3.
4.
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 .
Красным помечено.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715216
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman,

Попробуйте сначала на двух-трех диапазонах, чтобы скорость выполнения посмотреть.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715217
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@ __Michelle , спасибо что помогаете, однако....
может конечно я туплю, но как мне поможет такая конструкция если в ней так явно перечисляются диапазоны ? а если нужен будет диапазон с 2003 по 2005 то что тогда переписывать запрос под него? Да и если так явно перечислять то можно просто через Between.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715218
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или каким-то образом будет отрабатывать только тот диапазон что я задам? :)
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715231
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@ __Michelle
афигеть, таки да оно считает, правда выдает резалт в одну строку но считает.... какой интересный финт :)
поясните мне этот момент плиз AVG( ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#) )
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715234
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman,

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

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

Или это не так?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715237
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman,

А зачем Вы мне @ прицепляете?
Это что-то значит?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715243
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))


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

То есть, получаем для каждой даты следующее:
либо ТЕМПЕРАТУРА*-(-1), то есть, просто ТЕМПЕРАТУРА,
либо ТЕМПЕРАТУРА*0, то есть, просто 0.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715244
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle
авторЭто что-то значит? значит адресовано __Michelle

авторТак какой запрос все-таки нужен?
я ж выше написал - все работает ( [21699852] написано до выполнения SQL) , но я все еще не доганяю этого момента:
AVG(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715246
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle
авторТо есть, получаем для каждой даты следующее:
либо ТЕМПЕРАТУРА*-(-1), то есть, просто ТЕМПЕРАТУРА,
либо ТЕМПЕРАТУРА*0, то есть, просто 0.
ага, вот оно что. Теперь ясно почему по осадкам работает ОК а по т-ре нет... при подсчете среднего 0 учитывается... надо как-то это обойти... может Nz?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715249
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считать среднее "вручную"?
Код: sql
1.
Sum(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))/-Sum(Дата Between #11/01/2000# And #03/01/2001#) AS A1
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715258
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторSum(ТЕМПЕРАТУРА*-(Дата Between #11/01/2000# And #03/01/2001#))/-Sum(Дата Between #11/01/2000# And #03/01/2001#) AS A1
Может не /-Sum a /-Count /// но все равно резалт не верен... хм
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715261
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormmanМожет не /-Sum a /-Count /// Нет.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715263
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman,
как-то так (в запросе параметров дата в формате dd.mm.yyyy или dd.mm.yy)
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715264
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
dd.mm.yyyy
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715268
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку: если введете поле год:year(myData) все будет по годам (соответственно "допилите" поле [период])
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715269
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle
спасибо все получилось... громоздко правда, но все лучше чем я думал делать.

sdku
спасибо, но в вашем варианте данные обрабатываются по только по общему диапазону а надо см. пост 1
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715272
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторвдогонку: если введете поле год:year(myData) все будет по годам (соответственно "допилите" поле [период])
спасибо, завтра попробую допилить.... поздно уже... рано вставать надо

всем спасибо за помощь.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715276
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
SELECT Avg(Таблица1.temperatyra) AS [Avg-temperatyra], Sum(Таблица1.osadki) AS [Sum-osadki],
 "за период с " & Format([начало периода],"dd/mm/") & Year([myData]) & " по " & Format([конец],"dd/mm/") & Year([myData]) & " года" AS период
FROM Таблица1
WHERE (((Таблица1.myData) Between [начало периода] And [конец]))
GROUP BY "за период с " & Format([начало периода],"dd/mm/") & Year([myData]) & " по " &
 format([конец],"dd/mm/") & Year([myData]) & " года";
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715284
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой вариант
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Год, Avg(Температура) AS [СрТемп], Sum(Осадки) AS [СуммаОсадки]
FROM (select Дата, Температура, Осадки, 
     iif(month(Дата) >=11, year(Дата), year(Дата)-1) as Год from Таблица
     WHERE Year(Дата) Between [год начала] And [конечный год] 
     and month(Дата) in (1,2,3,11,12)) as z
GROUP BY Год
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715691
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku


mds_world
Многообещающий вариант, но мне не удается его запустить, т.к. не пойму это кусок:
Код: sql
1.
SELECT Год,...

.... что есть Год ?
это что поле алиас из этого:
Код: sql
1.
iif(month(Дата) >=11, year(Дата), year(Дата)-1) as Год 


в общем запустить не удается.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715711
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman mds_world
Многообещающий вариант, но мне не удается его запустить
Не удается это как? Ошибки? Какие? Что пишется? Если не удается побороть самому выкладывайте фрагмент БД. Только самое необходимое с небольшим количеством данных. Но так, чтобы появлялась ошибка.

bormmanчто есть Год ?
это что поле алиас из этого:Расчетное поле Год есть год начала периода. Можно конечно писать интервал, но мне показалось это нелогичным так как начало и конец интервала входят дважды. Хотя впрочем, основания такие же как и у года начала.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715805
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_world
Вот пример базы. В архив вложил техт. файл с некоторыми пояснениями.
Скачать
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715820
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715835
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
Абсолютно верно ! супер !
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715837
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman,

Ну так какого лешего вы второй день занимаетесь рукоблудством хардкодом?
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715842
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
ну почему занимаюсь... потому и занимаюсь, что знаком с аксом шапошно т.к. работаю в ексель а надо вытащить данные с акса, вот и ищу более изящные методы, чем выпиливание нужного из набора recordset
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715843
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared, спасибо за помощь
ну почему занимаюсь... потому и занимаюсь, что знаком с аксом шапошно т.к. работаю в ексель а надо вытащить данные с акса, вот и ищу более изящные методы, чем выпиливание нужного из набора recordset
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715853
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared
В этом месте
FROM METEO INNER JOIN Диапазоны ON METEO.DATA Between Диапазоны.ДатаНачала AND Диапазоны.ДатаОкончания
Ругается на отсутствие And после Between
По каким полям и какой связью вы соединили табл. METEO и Диапазоны ? или там вообще все по-другому реализовано.
Проще уже готовый файл скинуть.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715854
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715857
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared,

Выполняет, но даже в конструктор зайти не могу.. странно может версии акса разные... вот же зараза
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715862
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправлено
Код: sql
1.
2.
3.
4.
5.
SELECT Avg(([METEO.TDI]+[METEO.TDII]+[METEO.TDIII])/3) AS TT, Sum([METEO.ODI]+[METEO.ODII]+[METEO.ODIII]) AS OO, Z.Год
FROM (SELECT *, IIf(Month(DATA)>=11,Year(DATA) & "-" & Year(DATA)+1,Year(DATA)-1 & "-" & Year(DATA)) AS Год 
    FROM METEO 
    WHERE Year(DATA) Between 2000 And 2012 And Month(DATA) In (1,2,3,11,12)) AS Z
GROUP BY Z.Год
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39715865
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_world ,
Спасибо, наконец то заработало как надо.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39716024
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormman... Выполняет, но даже в конструктор зайти не могу..
Ничего удивительного.
Такого рода объединения доступны только в "Режиме SQL" конструктора запросов.
Это бага, переросшая в фичу давным давно.
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39716436
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если еще актуально гляньте это:
годится для разных интервалов любой длительности-все задается пользователем(форма:начало, конец (год),начало(месяц),длительность(месяцев)
...
Рейтинг: 0 / 0
Группировка данных по диапазону дат что входит в более широкий диапазон дат.
    #39716911
bormman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
спасибо, VBA то же очень хороший вариант, я сам некоторое время пользовался подобным, но самый лучший вариант - это получить максимально готовое решение с помощью SQL запроса за раз.... собственно за тем тему и создал.
Предложенные методы mds_world и Predeclared - самое то.

Еще раз всем спасибо.
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Группировка данных по диапазону дат что входит в более широкий диапазон дат.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]