|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Всем привет! В MS Access есть замечательные агрегатные функции, которых сильно не хватает в MySql Например, мне надо сгруппировать записи, и получить последнее внесённое значение. Я бы использовал функцию Last, но здесь её нет. Знаю, что можно использовать вложенный запрос с использованием MAX(код). Но сначала хочу переспросить, вдруг здесь что-то такое предвидено. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 16:20 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 16:32 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, спасибо за ссылочку Я попробовал использовать last_value, но всё равно возвращается первая, а не последняя запись Вот для сравнения два одинаковых запроса из Access и MySql И вот два разных результата Код: sql 1. 2. 3. 4.
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 17:01 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
НастаевЯ попробовал использовать last_value, но всё равно возвращается первая, а не последняя записьУказывайте фрейм полностью. Без указания при наличии ордер бай он идёт от начала группы до текущей записи. Или используйте first_value при обратной сортировке. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 21:30 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
AkinaНастаевЯ попробовал использовать last_value, но всё равно возвращается первая, а не последняя записьУказывайте фрейм полностью. Без указания при наличии ордер бай он идёт от начала группы до текущей записи. Или используйте first_value при обратной сортировке. плюсуюсь но если ты посмотришь на код автора, то он даже partition by не указал ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 16:19 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
[quot Leonid Kudryavtsev]Akinaон даже partition by не указал Ничего удивительного. Я не специалист в SQL. Ща разберусь и стану Гуру, как вы :P ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 17:10 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Я тут прочитал про оконные функции. Это - бомба! Иду завоёвывать мир... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 17:38 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Оно, может, и бомба, но с парой неочевидных запалов... так что поаккуратнее. Особенно очень внимательно изучи дефолтные фреймы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 18:17 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Akina, поюзал я функцию LastValue Какой-то результат с потолка берёт Понимаю, что никому не интересно в чужие запросы вникать, но раз уж я затронул эту тему, должен показать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 18:42 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Я прочитал о том, что эти условия Over потому так и называются, что накладываются на результат запроса. Поэтому стал экспериментировать, меняя условия запроса. Например: Сначала было так: Where наименование = 17 Потом так: Where наименование IN(17, 19) Логично заключить, что результат для наименования 17 должен остаться тем же. Но он всегда получается разным. Хм.... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 18:58 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
1. понятие ПЕРВЫЙ и ПОСЛЕДНИЙ имеют смысл ТОЛЬКО тогда, когда задан порядок. Т.к. любая запись всегда может быть первой/последней. Или последний с начала или последний с конца ))) или. в крайнем случае, последний с середины ))) LAST_VALUE(Заявки.Дата) OVER (PARTITION BY `Заявки вложенная`.Наименование) идет лесом. Вы order by не указали (и остальные описатели для окна/фрейм). Т.ч. это команда эквивалентна: дай первое попавшиеся И в результате ошибка "первое попавшиеся не попало" просто неизбежна НО order by Вам все равно не поможет. т.к. 2. AkinaУказывайте фрейм полностью. Без указания при наличии ордер бай он идёт от начала группы до текущей записи. Или используйте first_value при обратной сортировке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 19:42 |
|
Сортируй, не сортируй, всё равно получишь...
|
|||
---|---|---|---|
#18+
Настаевпоюзал я функцию LastValue Какой-то результат с потолка берётАга. Это ты как раз те самые грабли. Две штуки. LAST_VALUE, функция, явно зависящая от сортировки, у тебя используется без ORDER BY - то есть ты по определению попросил любую случайную хрень. Но даже будь сортировка... дефолтно фрейм при наличии ORDER BY определяется как ROWS BETWEEN UNBOUNDED PRECEIDING AND CURRENT RECORD. А вовсе даже не UNBOUNDED FOLLOWING. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 22:37 |
|
|
start [/forum/topic.php?fid=47&msg=39876719&tid=1828900]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 439ms |
0 / 0 |