|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Здравствуйте! Подскажите, пожалуйста, как правильно написать запрос. MySQL 8.0 Например, в таблице data хранятся такие данные: idaccountperiodareapayment1777'2018-05-01'49.810021001'2018-05-01'55.5513777'2018-06-01'49.820041001'2018-06-01'55.5425777'2018-07-01'46.030061001'2018-07-01'55.533 Нужно выбрать оплаты (payment) по каждому аккаунту (account) и показать последнее значение площади (area) за период (period). Такой запрос: Код: sql 1. 2. 3. 4.
выдаст accountareapayment77749.8600100155.556 Т.е. для площади показывается первое значение за период. Хотелось бы получить такой результат: accountareapayment77746.0600100155.536 Как выбрать последнюю запись в группе для площади? Попытался использовать оконную функцию Код: sql 1. 2. 3. 4.
Насколько понял из описания функции, должна возвратить значение последней строки в рамке окна, но результат прежний. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 14:59 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
LiYingдолжна возвратить значение последней строки в рамке окнаОна и возвращается. Просто окно по дефолту - BETWEEN UNBOUNDDED PRECEIDING AND CURRENT_RECORD. То есть до текущей запис, а не до последней в партиции при указанной сортировке. Самое простое решение - реверсируйте сортировку и берите FIRST_VALUE(). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:11 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
PS. Сортировка ОБЯЗАНА быть указана в определении окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:11 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Akina, Попробовал раздвинуть окно, но любое одно из выражений Код: sql 1. 2. 3. 4.
дает 49.8 для аккаунта 777, а не нужное 46.0. Где еще накосячил? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:39 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Создайте модельный fiddle (скажем, на https://dbfiddle.uk/?rdbms=mysql_8.0). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:58 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
ps. подозреваю, что period таки datetime и имеет компоненту времени... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:59 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Akina, Создал - https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b978c8b0816b4b6d14af516a90d942c8 Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 08:49 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Ок. Источник ошибки понятен. Оконная функция применяется к итоговому набору. В данном случае - после группировки. Группировка оставляет ОДНУ запись, а поле area в ней получает случайное значение (в данном случае - первое по кластерному индексу, т.е. для минимального id в группе). Правильный запрос выглядит так: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 09:19 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Akina, Большое спасибо за разъяснение и помощь, всё работает! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 09:33 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 06:03 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
Alex_Ustinov, ФАК этот читал, конечно же. Но там нет ни слова про использование оконных функций в теме. Можно туда внести мой пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 10:23 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
LiYingтам нет ни слова про использование оконных функций в темеЭто неудивительно. ФАК писан для пятых версий, которые не подозревают о существовании оконных функций. А для восьмёрки этот ФАК неактуален, там эта задача-то в общем тривиальна, если помнить о том, что есть оконные функции, и уж тем более если не жадничать на CTE. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 10:34 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
а если просто написать ORDER BY period DESC ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 13:39 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
или max(period) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 13:39 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
я надеюсь, period имеет тип data ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 13:40 |
|
Группировка с суммированием и последняя запись
|
|||
---|---|---|---|
#18+
max(period) не оно, там последняя area нужна но ORDER BY то должен сработать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 13:42 |
|
|
start [/forum/topic.php?fid=47&msg=39874554&tid=1828926]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 467ms |
0 / 0 |