|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вот тут https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_last-value написано Код: plaintext
как получить последнее значение ? и как получить количество в группе? при ....WINDOW w AS (PARTITION BY..... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 11:39 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
Что там непонятного? есть фрейм w с партиционированием по subject и сортировкой по time - вот в этом фрейме и получишь последнее с этой сортировкой значение с учётом указанных границ фрейма. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 11:57 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
first отображает логично. а last вроде как должна отображать 20 и 25 а по-факту просто дублирует val ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 12:11 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
А ты забыл про ROWS UNBOUNDED PRECEDING ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 14:05 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
создаём , заполняем Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
AkinaА ты забыл про ROWS UNBOUNDED PRECEDING ? нет , не забыл Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
"row_number""m""n""lag""lead""NTH_VALUE""first""LAST_VALUE"1110211121213112313231134133411351430114121601716161622171618161617321817191616184219180161619 так работает Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
"row_number""m""n""lag""lead""NTH_VALUE""first""LAST_VALUE"1110211421213114313231144133411451430114121601716161922171619161619421819016161932191718161619 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 15:02 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вот ещё остался вопрос про количество в "подгруппах" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 15:30 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вариант нумерации Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
"row_number_all""row_number_groop""m""n""lag_""lead""NTH_VALUE""first""LAST_VALUE"1111021142212131143313231144413341145514301146121601716161972217161916161984218190161619932191718161619 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 15:33 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вот только что-то не так с lag_ и lead .... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 15:38 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вот так надо Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
"row_number_all""row_number_groop""m""n""lag_""lead""NTH_VALUE""first""LAST_VALUE"1111021142212131143313231144413341145514301146121601716161972217161816161983218171916161994219180161619 вот только как по скорости такое? новшество... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 15:52 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадянет , не забылНе понял, что тебя не устраивает в результате запроса? Скажем, берём первую запись. Партиционирование по m , так что во фрейме с этой записью будут только записи с тем же m=1 . Сортировка по n - так что записи сортируются в порядке возрастания n . Граница ROWS UNBOUNDED PRECEDING - значит, во фрейм для ЭТОЙ записи попадают только те записи, которые идут не позже её в указанной сортировке. Т.е. для данной записи фрейм состоит из неё одной. И соответственно LAST_VALUE(n) для этой единственной записи равно значению n у этой записи, т.е. 1 . Возьмём вторую запись. Партиционирование по m , так что во фрейме с этой записью будут только записи с тем же m=1 . Сортировка по n - так что записи сортируются в порядке возрастания n . Граница ROWS UNBOUNDED PRECEDING - значит, во фрейм для ЭТОЙ записи попадают она ( n=2 ), а также все предыдущие записи в указанной сортировке, т.е. ещё и запись с n=1 . Т.е. для данной записи фрейм состоит из двух записей. И соответственно LAST_VALUE(n) среди них при сортировке по возрастанию n будет 2 . И так далее... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 16:16 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
AkinaНе понял, что тебя не устраивает в результате запроса?тут 21786797 LAST_VALUE не вяжется с FIRST_VALUE ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 16:23 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадя , укажи конкретную строку вывода и объясни, чем именно тебе не нравится выведенное там значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 16:25 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
колонка FIRST_VALUE отображает первое значение по своей "подгруппе" а колонка LAST_VALUE должна отображать последние значения по "подгруппе" - или я не правильно понял? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 16:30 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадяколонка LAST_VALUE должна отображать последние значения по "подгруппе" - или я не правильно понял?НЕТ!!! По ФРЕЙМУ !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 20:54 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
AkinaПо ФРЕЙМУ !!! Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 08:10 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
Не-е-е... Не путай раздел (PARTITION) и фрейм (PARTITION + BORDERS). Фрейм всегда является подмножеством раздела (в т.ч. может с ним совпадать). Если раздел одинаков для всех записей раздела, то фрейм может быть индивидуален для каждой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 09:15 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 10:39 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадя , фрейм включает три компонента. Первый - partition_clause, секционирование (PARTITION BY). Определяет деление записей на группы по равенству выражения секционирования. Второй - order_clause, сортировка (ORDER BY). Определяет порядок записей в секции. Третий - frame_clause, границы (BORDERS). Определяет, какие из записей секции будут включены во фрейм текущей записи с учётом текущего порядка. Задаются как ROWS - по номеру записи в текущей секции при текущей сортировке, либо как RANGE - по значению выражения, вычисляемого для каждой записи текущей секции (допустимые типы - числовой, тогда выражение должно иметь числовой тип, и дата-время, тогда выражение должно иметь тип INTERVAL). Изучи, наконец, Window Function Frame Specification полностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 11:56 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
Akina, ты хочешь сказать , что для last и first фрейм - это разные понятия? тут 21786568 всё одинаково , кроме вывода в колонках last и first ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:13 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадядля last и first фрейм - это разные понятия?Никто не мешает каждой из функций указать свой фрейм. вадятут 21786568 всё одинаково , кроме вывода в колонках last и firstДа ты задолбал общими фразами. Чётко объясняй - запись такая-то, значение такое-то, считаю, что должно быть такое-то, потому что ... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:43 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
AkinaДа ты задолбал общими фразами. Чётко объясняй - запись такая-то, значение такое-то, считаю, что должно быть такое-то, потому что ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
в столбце first все нормально - для партиции subject st113 выводится первое значение 10 для всей партиции(первое значение в партиции) для партиции subject xh458 выводится первое значение 0 для всей партиции(первое значение в партиции) для колонки last всё совсем не так..... вроде должно быть так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 17:12 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадя, блин, кажется даже я уже понял )) last дублирует val, потому что это значение val и есть последнее в (каждом!) фрейме. Еще раз: фрейм != партиция. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 05:42 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
paverвадя, блин, кажется даже я уже понял )) last дублирует val, потому что это значение val и есть последнее в (каждом!) фрейме. Еще раз: фрейм != партиция. тогда что отображает first? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 07:13 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадя , давай ещё раз. Возьмём определённую запись исходной таблицы. Например, седьмую. Определяем фрейм, который используется для обработки этой записи. 1) PARTITION BY subject Следовательно, в секцию этой записи входят записи с тем же значением subject, что и у текущей записи. Это записи с пятой по девятую. 2) ORDER BY time Следовательно, записи в секции сортируются по полю времени. И их порядок таков: пятая, шестая, седьмая, восьмая, девятая. 3) ROWS UNBOUNDED PRECEDING Следовательно, фрейм текущей записи начинается с начала секции (т.е. с пятой записи), и завершается текущей записью. Т.е. фрейм текущей записи включает следующие записи в следующем порядке: пятая, шестая, седьмая. Соответственно FIRST(val) вернёт значение val из первой записи фрейма, она же пятая запись. LAST(val) вернёт val из последней записи фрейма, т.е. седьмой. ================== Вот теперь ТОЧНО ТАК ЖЕ распиши всё для той записи и того поля, значение которого тебе не нравится. Только тогда можно будет увидеть, в какой именно точке ты косячишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 07:56 |
|
mysql 8 Window Function
|
|||
---|---|---|---|
#18+
вадяpaverвадя, блин, кажется даже я уже понял )) last дублирует val, потому что это значение val и есть последнее в (каждом!) фрейме. Еще раз: фрейм != партиция. тогда что отображает first? Значение val первой записи фрейма (которая по условиям твоего BORDERS совпадает и с первой записью секции). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 09:35 |
|
|
start [/forum/topic.php?fid=47&fpage=41&tid=1829358]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 455ms |
0 / 0 |