SQL mozgalica za mene, za nekog mozda \\\'piece of cake\\\'
27.11.2008. u 12:45 · pre 217 meseci
#1
Pogledajte tabelu koju imam na raspolaganju (pretpostavljam podatke):
Hocu da dobijem sledece:
E sad, nijesam bio lijen, iz knjige OReily SQL Cookbook sam nasao resenje za saldo, tj. running sum, mada oni tamo predlazu da se vrsi uporedjivanje po kljucu, ja uporedjivanje moram vrsiti po datumu dospijeca, jer mi zapisi tako MORAJU biti sortirani. Evo kako to izgleda:
Pa sam jos pokusao i da ubacim ovo sa datumima i evo do cega sam dosao:
Drugi select je trenutni datum, a prvi select je datum prije njega.
Ovo mora ici kao subquery gornjeg queryja, pa je citav query:
i radi :), ali se bojim da je klimavo, i da se nedje krije kakav bug, a posto ce biti hiljade i hiljade ovih zapisa, a ovaj query ce biti zahtijevan svako malo, koliko ce se ovakav query uopste brzo izvrsavati, a mozda neko ima i totalno drugaciji pristup gornjem problemu.
Molim vas za pomoc bilo koje vrste.
Pozdrav.
Code:
ID, Datum_knjizenja, Datum_dospijeca, Potrazuje, Duguje
1, nebitno 15.01.2008 45 0
2, nebitno 15.02.2008 42 0
3, nebitno 15.03.2008 38 0
4, nebitno 29.03.2008 0 100
5, nebitno 24.01.2008 11 0
6, nebitno 15.04.2008 45 0
7, nebitno 04.04.2008 0 50
...
ID, Datum_knjizenja, Datum_dospijeca, Potrazuje, Duguje
1, nebitno 15.01.2008 45 0
2, nebitno 15.02.2008 42 0
3, nebitno 15.03.2008 38 0
4, nebitno 29.03.2008 0 100
5, nebitno 24.01.2008 11 0
6, nebitno 15.04.2008 45 0
7, nebitno 04.04.2008 0 50
...
Hocu da dobijem sledece:
Code:
--- Datum_dospijeca, Saldo, Proteklo dana
--- 15.01.2008. -45 0
--- 24.01.2008. -56 9
--- 15.02.2008. -98 22
--- 15.03.2008. -136 28
--- 29.03.2008. -36 14
--- 04.04.2008. +14 7
--- 15.04.2008. -31 11
...
--- Datum_dospijeca, Saldo, Proteklo dana
--- 15.01.2008. -45 0
--- 24.01.2008. -56 9
--- 15.02.2008. -98 22
--- 15.03.2008. -136 28
--- 29.03.2008. -36 14
--- 04.04.2008. +14 7
--- 15.04.2008. -31 11
...
E sad, nijesam bio lijen, iz knjige OReily SQL Cookbook sam nasao resenje za saldo, tj. running sum, mada oni tamo predlazu da se vrsi uporedjivanje po kljucu, ja uporedjivanje moram vrsiti po datumu dospijeca, jer mi zapisi tako MORAJU biti sortirani. Evo kako to izgleda:
Code:
SELECT DISTINCT
Test.Datum, (SELECT(SUM(t.Duguje - t.Potrazuje)) FROM Test t WHERE t.Datum <= Test.Datum) AS Saldo
FROM Temp
ORDER BY Test.Datum ASC
SELECT DISTINCT
Test.Datum, (SELECT(SUM(t.Duguje - t.Potrazuje)) FROM Test t WHERE t.Datum <= Test.Datum) AS Saldo
FROM Temp
ORDER BY Test.Datum ASC
Pa sam jos pokusao i da ubacim ovo sa datumima i evo do cega sam dosao:
Code:
DateDiff(day,
(SELECT TOP 1 t3.Datum FROM Test t3 WHERE t3.Datum < Test.Datum ORDER BY t3.Datum DESC),
(SELECT TOP 1 t2.Datum FROM Test t2 WHERE t2.Datum = Test.Datum)) AS ProtekloDana
DateDiff(day,
(SELECT TOP 1 t3.Datum FROM Test t3 WHERE t3.Datum < Test.Datum ORDER BY t3.Datum DESC),
(SELECT TOP 1 t2.Datum FROM Test t2 WHERE t2.Datum = Test.Datum)) AS ProtekloDana
Drugi select je trenutni datum, a prvi select je datum prije njega.
Ovo mora ici kao subquery gornjeg queryja, pa je citav query:
Code:
SELECT DISTINCT Test.Datum, (SELECT(SUM(t.Duguje - t.Potrazuje)) FROM Test t WHERE t.Datum <= Test.Datum) AS Saldo, DateDiff(day, (SELECT TOP 1 t3.Datum FROM Test t3 WHERE t3.Datum < Test.Datum ORDER BY t3.Datum DESC), (SELECT TOP 1 t2.Datum FROM Test t2 WHERE t2.Datum = Test.Datum)) AS ProtekloDana
FROM Temp
ORDER BY Test.Datum ASC
SELECT DISTINCT Test.Datum, (SELECT(SUM(t.Duguje - t.Potrazuje)) FROM Test t WHERE t.Datum <= Test.Datum) AS Saldo, DateDiff(day, (SELECT TOP 1 t3.Datum FROM Test t3 WHERE t3.Datum < Test.Datum ORDER BY t3.Datum DESC), (SELECT TOP 1 t2.Datum FROM Test t2 WHERE t2.Datum = Test.Datum)) AS ProtekloDana
FROM Temp
ORDER BY Test.Datum ASC
i radi :), ali se bojim da je klimavo, i da se nedje krije kakav bug, a posto ce biti hiljade i hiljade ovih zapisa, a ovaj query ce biti zahtijevan svako malo, koliko ce se ovakav query uopste brzo izvrsavati, a mozda neko ima i totalno drugaciji pristup gornjem problemu.
Molim vas za pomoc bilo koje vrste.
Pozdrav.