Obliczanie kwot na podstawie dwóch tablic

0

Są dwie tablice:

Stawki

Id            tytul      od                     cenaj
1             tytul1    2013-01-01         0,10
2             tytul1    2014-01-01         0,20
3             tytul1    2015-01-01         0,30

Oplaty

Id            tytul      stawka  od                     do                      ilość
1             tytula    tytul1    2014-02-01         2015-03-01         10

Pożądany efekt końcowy zapytania byłby taki:

+--------+-----------------+-----------------+--------+
| tytula   | 2014-02-01        | 2015-01-01       |2,00      |
+--------+-----------------+-----------------+--------+
| tytula   | 2015-01-01        | 2015-03-01       |3,00      |
+--------+-----------------+-----------------+--------+

Jak takie zapytanie skomponować (Baza jest lokalna SQLITE, więc wchodzą w grę JOIN i LEFT OUTER JOIN ale nie RIGHT OUTER JOIN ani nie FULL JOIN)

Z góry dziękuję za odpowiedź

0

Póki możesz zmien tabele STAWKI dodając kolumnę DO. Zobaczysz ile problemów to uprości.

0

Wiem :)
Oprogramowałem już moduł edycji stawek, gdy jeszcze nie miałem do końca przemyślanej mechaniki naliczania kwot. Teraz się zarzynam z tym od pewnego czasu. Ale chyba w końcu będę przebudowywał. Chyba, że ktoś zna sposób, jak wyciągnąć takie dane bez ingerencji w kod programu i strukturę tablic?

1

Jeśli możesz zmodyfikować tak tabelę, jak napisałem wcześniej, to tak zrób. Jeśli nie, to możesz utworzyć sobie view:

CREATE VIEW v_stawki as select "id", "tytul", "od", Coalesce((SELECT Min(date("od",'-1 day')) FROM stawki WHERE "od">s."od"), '2020-12-31') as "do", "cenaj" from stawki as s

A potem to już prosto...

select o.tytul, max(o.od,s.od) od, min(o.do, s.do) do, s.cenaj from oplaty o join v_stawki s on o.od<=s.do and o.do>s.od

A jak nie możesz utworzyć nawet view, to:

select o.tytul, max(o.od,s.od) od, min(o.do, s.do) do, s.cenaj from oplaty o join (select "id", "tytul", "od", Coalesce((SELECT Min(date("od",'-1 day')) FROM stawki WHERE "od">s."od"), '2020-12-31') as "do", "cenaj" from stawki as s) s on o.od<=s.do and o.do>s.od

1 użytkowników online, w tym zalogowanych: 0, gości: 1