|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
Есть выборка select rec.rec_id, rec.data_op from tmp_tbl rec where rec.data_op between data1 and data2 Задача - добавить в выводимые поля min_rec_id и max_rec_id , где min_rec_id - id минимальной записи в периоде или, если в периоде нет записей, то максимальной записи до периода, а max_rec_id, максимальной записи в периоде или максимальной до периода, если в периоде нет записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:08 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
Вы бы исходные данные и ожидаемый результат представили, что-ли... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:15 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
mod, union all аналитические функции тебя не спасут - ты хочешь выдеть мир за пределами стены фильтрации данных. Так что, либо union all, либо чья-то гарантия , что в пределах фильтра ты увидишь всё, что тебе нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:21 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
andrey_anonymous, да и так понятно - "остаток на начало периода фильтрации" он хочет получать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:24 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
booby да и так понятно - "остаток на начало периода фильтрации" он хочет получать. Это не повод истирать пальцы об клавиатуру, выдумывая набор за ТС :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:32 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
rec_id data_op 1 01.01.2020 2 02.01.2020 3 13.03.2020 data_1 = 05.02.2020, data_2 = 12.02.2020 Результат: 2 2 null null (min_rec_id, max_rec_id, rec_id, data_op) data_1 = 31.12.2019, data_2 = 05.02.2020 Результат: 1 2 1 01.01.2020 1 2 2 02.01.2020 Как именнованными понятно, если даты диапазона увести в dual. Можно ли как-то окнами? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:33 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
booby, Ну значит да, пусть будут именнованные подзапросы. Спасибо! Просто аналитическими редко приходится пользоваться. Уточнил - вдруг чего да упускаю ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:41 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
mod вдруг чего да упускаю Вообще упускаете, но тут можно на performance penalties налететь если данных много и нельзя сделать разумного предположения о максимальном размере перерыва в датах. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:44 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
andrey_anonymous, потому м спросил - простое решение понятно, но оно, безусловно по скорости может быть не фонтан. Перерывы могут быть и большие. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:02 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
mod, Если в периоде нет записей, то ваш запрос не вернет ничего, поэтому вероятно union all, только одной синтетической записи, а не тех которые вы добавили. Для оформления кода используйте пожалуйста тег src. Думаю, если вы пример исходных данных набросаете в with, то ваш вопрос отпадет сам собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:17 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
mod rec_id data_op 1 01.01.2020 2 02.01.2020 3 13.03.2020 data_1 = 05.02.2020, data_2 = 12.02.2020 Результат: 2 2 null null (min_rec_id, max_rec_id, rec_id, data_op) data_1 = 31.12.2019, data_2 = 05.02.2020 Результат: 1 2 1 01.01.2020 1 2 2 02.01.2020 Как именнованными понятно, если даты диапазона увести в dual. Можно ли как-то окнами? еще раз: окна не умеют работать вне диапазона фильтрации. Поэтому, если точно внутри одного sql-запроса, сначала формируете такой набор, на котором окна смогут работать правильно, и только потом, поверх этого набора - окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:22 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
mod, Код: plsql 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.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 15:08 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
Stax, Если условие задачи прочитать немного внимательнее, то результат неверный и скалярные подзапросы лишние. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 15:27 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
Stax, Код: plsql 1.
Неофит пока еще заблокирован, и вряд ли сможет от себя лично выдать гарантии на правильную работу такого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 15:31 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
graycode Stax, Если условие задачи прочитать немного внимательнее, то результат неверный и скалярные подзапросы лишние. считал 2 2 очепяткой Код: plsql 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.
Ваш вариант? ps у меня тож есть и другие варианты решения ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 16:30 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
booby Stax, Код: plsql 1.
Неофит пока еще заблокирован, и вряд ли сможет от себя лично выдать гарантии на правильную работу такого запроса. гарантии насчет :d1? мне просто лень было всюду прописывать to_date ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 16:32 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
Stax, я подразумевал вот что: обычно, предполагаемая логика в этой, изложенной в стиле "максимальной записи до периода" задаче, такая: ищется нечто, слева максимально близкое по дате к заказанному диапазону поиска + набор данных в диапазоне поиска. Смысл такого поиска в том, что история "объекта" может начинаться слева до начала диапазона поиска, и нужно отыскать "истинное состояние объекта" на начало анализируемого диапазона времени. Из полученного вычислением выводится нечто, относящееся к концу заказанного периода поиска. В этом смысле, в терминах условного rec_id, понимается такой rec_id, который относится к самому близкому слева моменту времени. В варианте (select max(rec_id) from t where data_op<:d1) для обеспечения такого условия необходима гарантия монотонного возрастания rec_id со временем. Иначе запрос вернет данные, не соответствующие развернуто выраженному намерению. ... Хотя, может быть и правда, ему нужно только и именно то, что было сформулировано в первом посте... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 17:37 |
|
Можно сделать через аналитические функции или только через именнованные подзапросы?
|
|||
---|---|---|---|
#18+
booby Stax, я подразумевал вот что: .... да, так более логично, я принял условие буквально если нужно не мах/min то поменять на keep и first/last Код: plsql 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 18:08 |
|
|
start [/forum/topic.php?fid=52&fpage=33&tid=1880731]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 156ms |
0 / 0 |