|
|
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите, пожалуйста, как можно добавить с помощью Select недостающие значения в такую таблицу: Сейчас она в таком виде: BDate DB CR BALANCE 11-01-2016 0 1000 1000 25-01-2016 500 400 900 08-02-2016 300 0 600 А нужно : 01-01-2016 0 0 0 02-01-2016 0 0 0 ........ 11-01-2016 0 1000 1000 12-01-2016 0 0 1000 ....... 25-01-2016 500 400 900 26-01-2016 0 0 900 ....... 01-02-2016 0 0 900 .......... 08-02-2016 300 0 600 ..... 28-02-2016 0 0 600 и т.д. т.е её необходимо дополнить полными месяцами и остатком на каждый день , сейчас записи имеются только для вариантов, когда были движения по счёту. Я нашел вариант для MS-SQL, но не смог переработать для Oracle в силу нехватки знаний. http://www.sql.ru/forum/1178550/srednehronologicheskiy-ostatok-dobavlenie-iskusstvenno-predydushhih-znacheniy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:29 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
SELECTOM скорее всего никак. А вот с помощью MERGE вполне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:32 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
К ,сожалению, править таблицу нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:35 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Так куда вам нужно добавить в таблицу или в выборку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:42 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
В выборку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:50 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Значит тебе нужен источник "всех значений", с которым ты и будешь делать outer join своей таблицы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:52 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
with? self join? Смотря по какому принципу надо добавлять, по тестовым данным не очень понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:53 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Esploratoreт.е её необходимо дополнить полными месяцами и остатком на каждый день , сейчас записи имеются только для вариантов, когда были движения по счёту. Поискать что-то вроде start of group? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:55 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE BALANCES (ID NUMBER NOT NULL, ACCT_ID NUMBER NOT NULL, BDATE DATE NOT NULL, CR NUMBER (20,2), DB NUMBER (20,2), BALANCE NUMBER (20,2)); INSERT INTO BALANCES VALUES (1, 1, TO_DATE('15-01-2016','DD-MM-YYYY'), 1000.00, 0.00, 1000.00); INSERT INTO BALANCES VALUES (2, 1, TO_DATE('22-01-2016','DD-MM-YYYY'), 600.00, 300.00, 1300.00); INSERT INTO BALANCES VALUES (3, 1, TO_DATE('04-02-2016','DD-MM-YYYY'), 100.00, 0.00, 1400.00); INSERT INTO BALANCES VALUES (4, 1, TO_DATE('29-02-2016','DD-MM-YYYY'), 0.00, 200.00, 1200.00); Вот данные для таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:59 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Проще всего сделать на клиенте. А так навскидку два варианта a. 1. select из основной таблицы в tmp 2. MEGRGE в тмп таблицу 3. выборка 2. более сложный 1. Сформировать список дат со значениями 2. UNION с основной выборкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 12:02 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Esploratoreнеобходимо дополнить полными месяцами и остатком на каждый день , сейчас записи имеются только для вариантов, когда были движения по счёту. Use of Partition Outer Join to Handle Sparse Data + LAST_VALUE analytic function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 12:02 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
А вдруг это оно ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 13:26 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Вариант с last_value, но без partition outer join Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 15:55 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Futbolist, Лучше так - было лишнее cte. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 15:59 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Получить все дни в диапазоне без пропусков ну и затем получить в данный день сумму баланса не составит труда. SELECT date_b + level from dual connect by level < (date_e - date_b) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 16:31 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Futbolist - спасибо огромное ! Только еще я забыл одно условие - вывести acct_id в итоговой выборке, как это можно сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 18:44 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Esploratore, авторТолько еще я забыл одно условие - вывести acct_id в итоговой выборке, как это можно сделать ? Если acct_id разные и для каждого для каждой даты должны быть свои строки с дебетом и кредитом (нулевыми, если движений не было) и остатком на дату, все немного усложняется. Надо вводить группировку по счетам и в last_value будет partition by Код: 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. Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 00:01 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. можно выкинуть, per теперь используется только в cte. Издержки переработки запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 00:04 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Futbolist, от чего на твоих данных, баланс, к примеру, по acct_id=3 на 01.01.2016 возвращается вдруг 300 ;) Все же мне кажется проще - так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 10:17 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
авторот чего на твоих данных, баланс, к примеру, по acct_id=3 на 01.01.2016 возвращается вдруг 300 ;) Ну это попытка получить остатки, если, например, остатки за некий начальный период удалили или селект делается по выборке за период. Там типа не совсем корректное первое значение Код: plsql 1. Был приход 200, а остаток стал не 200, а 500. Вот я и считаю, что 300 было в предыдущий день. А за пример с PARTITION BY спасибо, не знал про него, как раз сегодня хотел прочитать твою ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 10:39 |
|
||
|
Добавить селектом недостающие значения
|
|||
|---|---|---|---|
|
#18+
Futbolistпример с PARTITION BY Он здесь годен только для случая, если мы не рассчитываем входящий остаток для периода, позволяет избежать явного кроссджойна с distinct по acct_id. При наличии требования включения входящего остатка, у нас необходимость в партишн джойне отпадает, потому как есть набор входящего остатка, к которому кросджойним множетсво дат и джойним слева факты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 11:21 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=193&tid=1887159]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 394ms |

| 0 / 0 |
