|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3.
max(col) не подходит... мне нужна col именно с той же самой строки, где лежит max(status), но при таком запросе она ругается но если в GROUP BY пихнуть col, то будет уже 2+ строки, а мне нужна только max() а если sum(col), то просуммирует ВСЕ строки с этим id неужто только с подзапросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:31 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:35 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик а если sum(col), то просуммирует ВСЕ строки с этим id ээээ ... это надо понимать так, что поле id не уникальное ?? ахренедь ! Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:40 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
ну это не тот id, это parent entity id (peid) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:54 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
спасибо, всё чётко так и знал, что надо оконки подключать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 20:11 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Через window functions это конечно решается но это дико дорогое и тормозное решение на больших обьемах. На практике это конечно же через DISTINCT ON конструкцию решается https://www.postgresql.org/docs/13/sql-select.html#SQL-DISTINCT В вашем случае это будет нечто вида Код: sql 1. 2. 3.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 05:50 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
хм, хм... а говорят, что: "DISTINCT ON" on a large table always is performance killer. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 09:05 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик хм, хм... а говорят, что: "DISTINCT ON" on a large table always is performance killer. только window functions еще больше performance killer... они для аналитики а не для online даже теоретически.... если количество уникальных id (в вашем случае) небольшое(1% и менее) относительно общего количества строк в таблице можно руками быструю версию distinct on сообразить которая будет на порядки быстрее при необходимости. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 09:38 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#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. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 12:33 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Следующий слайд где sql запрос без использования pl/pgsql на туже тему. )) Важно понимать что это помогает если у вас на 100 сторок 1 уникальная...или хотя бы на 10 строк (и тут уже не факт как будет быстрее). А когда у вас уникальных треть или половина там этот подход не поможет. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 14:30 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
а вот тут не работает такой вариант... Код: sql 1. 2. 3. 4. 5. 6. 7.
на этот раз мне нужны строки с минимальным added, но PG вытаскивает любую строку без сортировки ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 17:05 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик а вот тут не работает такой вариант... Код: sql 1. 2. 3. 4. 5. 6. 7.
на этот раз мне нужны строки с минимальным added, но PG вытаскивает любую строку без сортировки Странная идея... работает конечно. Просто не так как вы почему то думаете но 100% логично. Я подозреваю что вам надо запрос вида Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
PS: для такой задачи есть намного более эффективные решения через рекурсивный CTE впрочем. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 17:15 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
ну вообще вот так сработало: Код: sql 1. 2. 3. 4.
а эта задача не та что в сабже чтоли? Мне здесь тоже надо строки только с min(added)... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 17:23 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик ну вообще вот так сработало: Код: sql 1. 2. 3. 4.
а эта задача не та что в сабже чтоли? Мне здесь тоже надо строки только с min(added) Не таже... вам надо 25 с минимальным added а не все ctid с их минимальными added (и главное прочими полями из строки). В вашем решении вообще никакой гарантии какие именно 25 строк вам вернуться. Рекомендую таки еще раз подумать о корректной постановке задачи. "на этот раз мне нужны строки с минимальным added" - однозначной постановкой не является... -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 17:28 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
ну там такой расклад: Код: sql 1. 2. 3.
и возвращает он мне именно строки, у которых минимальный added по одной для каждого cid всего 25 cid ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 19:18 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик ну там такой расклад: Код: sql 1. 2. 3.
и возвращает он мне именно строки, у которых минимальный added по одной для каждого cid всего 25 cid 1)У вас тут концептуальное непонимание чем отличается group by от distinct on distinct on нужен когда вам не только cit + min(added) надо а ещё соответсвующие им uid - эта задача через group by не решается 2)таки вам надо любые 25 уникальных cid с их min(added) или какие то конкретные? если любые то distinct on вам из выдаст равно как и group by если не любые то надо определить какие именно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 22:08 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
где у меня непонимание? п.1 как раз понятен он мне НЕ выдаёт минимальный added, если делать через DISTINCT - вот что непонятно он выдаёт любые added мне надо все cid, у которых минимальный added и cc = 0 (там 1 или 0 на каждой строке) cc - это 4я колонка, а uid тут не нужен мой вариант тоже этого не даёт, там нужен ещё один запрос, но он хотя бы минимальный added вынимает ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 23:17 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик где у меня непонимание? п.1 как раз понятен он мне НЕ выдаёт минимальный added, если делать через DISTINCT - вот что непонятно он выдаёт любые added мне надо все cid, у которых минимальный added и cc = 0 (там 1 или 0 на каждой строке) cc - это 4я колонка, а uid тут не нужен мой вариант тоже этого не даёт, там нужен ещё один запрос, но он хотя бы минимальный added вынимает не может distinct on выдавать не минимальный added если вы ничего не перепутали в запросе. обычно путают в order by (который там естественно критичен для получения корректного результата) -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 00:03 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
ну в ORDER BY впереди всегда должен стоять cid, который в DISTINCT ON а следом за ним added, где ASC = min(added), а DESC = max(added) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 02:29 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
щас норм стало, я запрос переписал где-то всё таки была ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 02:40 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
только появился ещё нюанс - если добавить WHERE cc = 0, то когда cc = 1 при минимальном added, то он его отбросит и вытащит минимальным следующий... который уже НЕ минимальный как-то это можно обыграть в одном запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 02:47 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик только появился ещё нюанс - если добавить WHERE cc = 0, то когда cc = 1 при минимальном added, то он его отбросит и вытащит минимальным следующий... который уже НЕ минимальный как-то это можно обыграть в одном запросе? Код: sql 1. 2. 3. 4. 5. 6. 7.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 10:36 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
ага, ну это очевидный вариант в 2 запроса ) спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 10:55 |
|
как вытащить соседний столб в запросе с max(col) ?
|
|||
---|---|---|---|
#18+
бабушкин зайчик ага, ну это очевидный вариант в 2 запроса ) спасибо Многие сложные аналитические запросы строятся по принципу матрёшки из вложенных запросов. Это свойство SQL как языка работы с множествами а не процедурного. А вот если надо будет этот запрос по реально большой таблице гонять да ещё и с ORDER BY added LIMIT 25 - там начнуться варианты как написать это всё быстро в процедурном стиле хотя и на sql. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 11:13 |
|
|
start [/forum/topic.php?fid=53&msg=40084462&tid=1993936]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 374ms |
0 / 0 |