|
|
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нужна помощь. Есть таблица со столбцами: id, id_ticket, date, description. Необходимо вывести значения description для каждого id_ticket по максимальному значению даты (date). Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 14:54:27 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
barkleygarnett, RTFM "DISTINCT ON .... ORDER BY" (пж-специфично) но если речь об оптимизации -- то it depends например каково количество всех записей, и среднее количество id_ticket-ов в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:19:55 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
лопатаbarkleygarnett, RTFM "DISTINCT ON .... ORDER BY" (пж-специфично) но если речь об оптимизации -- то it depends например каково количество всех записей, и среднее количество id_ticket-ов в ней. Например, select distinct on (id_ticket) description from table order by id_ticket, date desc; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:27:56 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
barkleygarnett<> Например, select distinct on (id_ticket) description from table order by id_ticket, date desc; ? но стоит ожидать диких тормозов при [очень] небольшом числе id_ticket относительно всего числа записей (и текущем состоянии оптимизатор пж [афтары пжодмина или примочки для отображения пжогента в нем тут нам продемострировали ансаксесс стори. поубивал бы]). в этом случае легче взять заведомом дистинктный полный набор id_ticket , а дискрипшоны дергать кореллятами (или lateral-ами). [с lateral правда не уверен, уже обламывался. кореляты убойнее] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 15:46:22 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
barkleygarnett, Добрый день. Это можно реализовать например с помощью "Window Functions" http://www.postgresql.org/docs/9.1/static/tutorial-window.html PS. Реализовывал подобное тут. http://www.biwed.ru/index.php/dobryaki/16-sql/57-window-function С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 14:40:12 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
biwed.rubarkleygarnett, Добрый день. Это можно реализовать например с помощью "Window Functions" http://www.postgresql.org/docs/9.1/static/tutorial-window.html PS. Реализовывал подобное тут. http://www.biwed.ru/index.php/dobryaki/16-sql/57-window-function С уважением, biwed.ru Спасибо за информацию. А если мне нужно вывести данные только для одного столбца (например, description) для каждого id_ticket по максимальной date. Используя ваш пример ( http://www.biwed.ru/index.php/dobryaki/16-sql/57-window-function) можно так написать: SELECT description FROM table WHERE max("date") over(partition by id_ticket) или запрос будет выглядеть как-то иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:43:13 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
barkleygarnett, Добрый день. По ссылке на туториал вы очевидно не ходили. Задание таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Ваш запрос будет выглядеть так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. PS. При обращении к помощи, сделайте хотя бы пример с данными и что хотите получить. Так проще. С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:53:07 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
biwed.ru, вот о чем речь и была: test_case Код: 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. test biwed.ru Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. test {ticket-distinct-list}+ LATERAL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. на самом деле у нас ращные резудьтаты, т.к. не гарантировано уникью по дате приведем к вашему набору: CTE + ( {ticket-distinct-list}+ LATERAL) Код: 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. -- т.е. "лишние буковки" в тексте запросов вполне окупаются. а вот виндовс тут уместен только тогда, когда тиккетов много, сравнимо (или всего на порядок меньше) чем фактов ("групп" в вашем примере) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 11:57:46 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
лопата, Добрый вечер. Спасибо за литерал и исследования. PS. Просто на работе стоит версия ниже чем 9.3, поэтому литерал пока не юзал. С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 13:52:46 |
|
||
|
Выбрать значения по максимальному времени
|
|||
|---|---|---|---|
|
#18+
biwed.ruлопата, Добрый вечер. Спасибо за литерал и исследования. PS. Просто на работе стоит версия ниже чем 9.3, поэтому литерал пока не юзал. С уважением, biwed.ruне путайте лэйтерал с литералом он [lateral] не делает в общем ничего особенно нового, но коренным образом упрощает запись (да и излишние вычисления при "оборачиваниях", которые приходилось выполнять) некоторых трюков (что особенно приятно для табличных ф-й, или же при LIMIT >1 ) да, тут Maxim Boguk как-то прокручивал извлечение дистинкта из самОй большой таблицы ( http://www.sql.ru/forum/882778/bystryy-podschet-distinct-values-po-indeksirovannym-polyam?mid=11326416#11326416 ) (я в тестах лениво заменил взятием полного набора из заведомого справочника), при наличии индекса. Тут есть несколько тем (в т.ч. выборки [коротко] вдоль индекса по 5 топовых "фактов" в группе, а не по одному). Ещё до всяких lateral-офф. покопайтесь. Это все актуально при определенном соотношении количеств "low_cardinality" к общему числу записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 14:24:00 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=121&tid=1998394]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 424ms |

| 0 / 0 |
