|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
Здравствуйте! Пытаюсь на sqlite 3.22.0 сделать депозитный калькулятор ===============Создание таблиц=============== CREATE TABLE deposit(_id INTEGER PRIMARY KEY AUTOINCREMENT, oper_type INTEGER, -- Тип операции inc_date TEXT, -- Дата пополнения депозита repl REAL -- Сумма пополнения депозита ); ===============Заполнение таблиц=============== INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-02-21', 400000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-03-01', 10000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-03-16', 10000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-03-30', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-04-24', 20000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-04-28', 40000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-05-25', 10000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-06-01', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-06-13', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-07-05', 10000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-08-02', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-09-03', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-10-01', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-11-01', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-11-30', 10000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2018-12-27', 50000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-01-04', 2000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-02-01', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-03-01', 8000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-03-27', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-05-02', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-06-12', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-07-01', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-08-01', 5000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-11-01', 20000, 0); INSERT INTO deposit (inc_date, repl, oper_type) VALUES ('2019-12-01', 5000, 0); Необходимо одним запросом подсчитать суммы пополнений по годам, с учётом предыдущих лет. Я написал такой запрос SELECT strftime('%Y', inc_date) AS year, sum(repl) FROM deposit WHERE oper_type = 0 GROUP BY year; Он возвращает "2018" "910000.0" "2019" "65000.0" "2020" "15000.0" А мне надо "2018" "910000.0" "2019" "975000.0" "2020" "990000.0" Помогите, пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:04 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
ufovo, Не самое лучшее Код: sql 1. 2. 3. 4. 5.
Но скорее всего нужно будет так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 18:14 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
Не знаю что такое депозитный калькулятор, если я правильно понял, нужен нарастающий итог https://www.sqlitetutorial.net/sqlite-window-functions/ С помощью LEAD / LAG явно можно сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 18:16 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
VSVLAD, не самое лучшее работает, спасибо! А во втором запросе ошибка near "(": syntax error: with p as ( select strftime('%Y', inc_date) as year, max(inc_date) as year_last_date from deposit group by strftime('%Y', inc_date) ), s as ( select inc_date, sum(case when oper_type = 0 then repl else -repl end) over ( Если не затруднит, не могли бы Вы пояснить, почему первый запрос считаете не самым лучшим? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 06:10 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
ufovo, Во втором запросе ошибок нет, проверьте что весь выполняете, а не кусок запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 07:32 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
ufovoЕсли не затруднит, не могли бы Вы пояснить, почему первый запрос считаете не самым лучшим?Потому что он считает таблицу много раз. Сначала делает внешний проход набирая группы, потом для каждой группы проходит по таблице еще раз чтобы посчитать сумму для группы. Легче всего подобные задачи решать триггером который при добавлении новой строки в таблицу (индивидуальных депозитов) будет обновлять значение в таблице итогов. Как другой легкий вариант - вытащить суммы по группам на клиента, и уже там сделать суммирование групп. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 18:45 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
Чем аналитика не нравится? На SQLLite не проверял, пример на Oracle Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Тестовые данные Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 20:00 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
VSVLADНо скорее всего нужно будет так +++ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2019, 20:03 |
|
Депозитный калькулятор
|
|||
---|---|---|---|
#18+
Всем спасибо за пояснения! Я изучаю SQL самостоятельно, по интернету. Азы вроде как освоил, но сложные выборки вгоняют меня в ступор. Очень смущает отсутствие циклов. Oracle не подходит, так как программа максимум это приложение, которое будет работать на android. Сейчас занимаюсь бакэндом, запрос, который я просил помочь составить является частью функции, считающей годовую капитализацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2019, 13:30 |
|
|
start [/forum/topic.php?fid=54&msg=39883679&tid=2008373]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 146ms |
0 / 0 |