|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Всем день добрый! Помогите, пожалуйста с запросом. есть таблица (пример содержимого) ID DT type employeeID1 03.06.19 8:44:25 1 55942 03.06.19 8:45:21 1 51393 03.06.19 8:46:03 1 71074 03.06.19 8:48:15 1 11505 03.06.19 12:44:04 2 55946 03.06.19 12:47:12 1 94617 03.06.19 14:04:28 2 71078 03.06.19 17:34:25 1 10049 03.06.19 18:43:14 2 946110 03.06.19 19:34:15 1 9214 нужно из нее вывести строки с данными, где по каждому employeeID последний отмеченный type равен 1 у меня максимум что получилось, вывести последнюю дату по каждому employeeID, а как к ним приклеить правильный type никак не пойму. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 10:28 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Reginar, select max(dt),type,empid from temp where type='1' group by type,empid; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 11:40 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Reginar, "последний" по DT или по ID ? Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 12:18 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 13:39 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Reginar, Что то тут переусложненные варианты советуют (хотя и рабочие). Почитайте про DISTINCT ON https://www.postgresql.org/docs/11/sql-select.html#SQL-DISTINCT Код: plsql 1. 2. 3. 4. 5.
как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 14:02 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
верно, но при некоторых прочих (мало уникальных еидов == много повторов, + есть индекс по (empid,id)), пока оптимайзинга дистинкт-он-а в самом пж не реализовано, быстрее будет что-то из разряда Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:14 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Maxim Boguk, Я так понял записи с type=2, с теми же employeeID, где последний type=1 тоже надо вывести ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:15 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо, не знал о такой реализации DISTINCT. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:18 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
qwwq, в вашем примере если у одного employeeID будет 2 записи с type=1 тогда они обе выведутся. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:25 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
TrogloditMaxim Boguk, Я так понял записи с type=2, с теми же employeeID, где последний type=1 тоже надо вывести о, похоже вы тщательнее прочитали условие тогда довольно в широком диапазоне окна хороши но можно отмодифачить seek -- а именно { ключ+лейтерал запхать в exists} ,для случаев, когда уникальных еидов будет достаточно много (вернее когда конец цепочки еида на тип=1 -- редкость в данных) , и нестед лупы по редкой выборке будут быстрее , чем полный скан таблицы. хотя наверное индекс можно прикрутить с тайпом в конце и емп_ид в начале -- навскидку. не смотрел ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:31 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Trogloditqwwq, в вашем примере если у одного employeeID будет 2 записи с type=1 тогда они обе выведутся. в каком из ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:33 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
qwwq, Код: sql 1. 2. 3. 4. 5. 6.
если будет 1 01.01 1 1 2 02.01 2 1 3 03.01 1 1 Ваш запрос выведет эти записи 1 и 3. Maxim Boguk считает что должна выводится только последняя, т.е. 3 в моем примере Я, что все. У вас результат вернет 1 и 3, если я не ошибаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:42 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Trogloditqwwq, Код: sql 1. 2. 3. 4. 5. 6.
если будет 1 01.01 1 1 2 02.01 2 1 3 03.01 1 1 Ваш запрос выведет эти записи 1 и 3. Maxim Boguk считает что должна выводится только последняя, т.е. 3 в моем примере Я, что все. У вас результат вернет 1 и 3, если я не ошибаюсь Это к вопросу о том что к таким задачам надо требуемый результат указывать (а не только входные данные). Или ОЧЕНЬ аккуратно требуемый результат описывать. А автор вопроса этого не сделал (как обычно на этом форуме впрочем). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:46 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Trogloditqwwq, Код: sql 1. 2. 3. 4. 5. 6.
если будет 1 01.01 1 1 2 02.01 2 1 3 03.01 1 1 Ваш запрос выведет эти записи 1 и 3. Maxim Boguk считает что должна выводится только последняя, т.е. 3 в моем примере Я, что все. У вас результат вернет 1 и 3 , если я не ошибаюсь я делаю то же , что и МБ ЧЯДНТ? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:59 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
qwwq, Я не правильно понял ваш запрос с 2-мя таблицами, когда у автора была одна. Ваш запрос работает. Но очень изящный и на мой взгляд более производительным будет пример Maxim Boguk. У вас нет таблицы empl_table, т.е. ее еще надо сделать из _dt(а это по сути тот же distinct, плюс к этом дополнительный join) , и кстати откуда у вас взялись id 2 и 3, когда в вашем примере только empid=1. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 17:39 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
Trogloditqwwq, Я не правильно понял ваш запрос с 2-мя таблицами, когда у автора была одна. Ваш запрос работает. Но очень изящный и на мой взгляд более производительным будет пример Maxim Boguk. У вас нет таблицы empl_table, т.е. ее еще надо сделать из _dt(а это по сути тот же distinct, плюс к этом дополнительный join) , и кстати откуда у вас взялись id 2 и 3, когда в вашем примере только empid=1. речь не про изящество кляузы а про оптимальность выполнения. слово "дистинкт он" в пж есть, а вот луз-индекскан для него не реализован. что печально. вместо "второй таблицы" в случае отсутствия таковой в бд (что редкость) -- реализуем упомянутый "LOOSE indexscan" ручками. как -- порыскать тут (или в гугле) поиском и додумать. если же табла неиндексирована, то дистинкт он -- самое оно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 18:00 |
|
запрос на выборку по максимальной дате
|
|||
---|---|---|---|
#18+
qwwq, Я понял о чем вы. До этого видел доклад Maxim Boguk, просто у него через CTE было в примерах я не сразу понял о чем речь. Я вообще думаю такие вещи нужно решать не реляционными способами, а потоковыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 23:48 |
|
|
start [/forum/topic.php?fid=53&msg=39844267&tid=1995091]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 155ms |
0 / 0 |