tblKonti indeholder: - Kontonr - Saldo Een konto med een saldo
tblRykker indeholder: - Kontonr - Dato - Saldo Der kan altså være flere konti med forskellige datoer
Jeg vil så gerne lave et udtræk, som viser: - alle konti - saldoen og datoen for seneste (ift. dato) rykker (hvis der er en rykker - det er ikke altid tilfældet)
Det skal være i en SQL-streng (skal proppes ind i en VB-funktion), og forespørgslen må derfor kun inkludere tabeller.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
SELECT tblkontonr.kontonr, max(tblrykker.Dato), tblrykker.saldo FROM tblkontonr INNER JOIN tblrykker ON tblkontonr.kontonr = tblrykker.kontonr GROUP BY tblkontonr.kontonr, max(tblrykker.Dato);
select tblKontonr.Kontonr, tblRykker.dato from tblKontonr, tblRykker where tblKontonr.Kontonr = tblRykker group by tblKontonr.Kontonr having tblRykker.dato = max(tblRykker.dato)
ok du laver 2 queries istedet fordi du ikke kan aggregere paa saldo:
Query1: SELECT tblkonti.Kontonr, Max(tblrykker.dato) AS MaxOfdato FROM tblkonti LEFT JOIN tblrykker ON tblkonti.Kontonr = tblrykker.Kontornr GROUP BY tblkonti.Kontonr;
Query2: SELECT Query1.Kontonr, Query1.MaxOfdato, tblrykker.saldo FROM tblrykker INNER JOIN Query1 ON (tblrykker.dato = Query1.MaxOfdato) AND (tblrykker.Kontornr = Query1.Kontonr);
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Sum(tblRykker.Saldo) AS Saldo_tblRykker FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Sum(tblRykker.Saldo) AS Saldo_tblRykker, Max(tblRykker.Dato) AS [Seneste rykker] FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
skwat: der mangler jo saldoen - den kan du ikke inkludere
jensen: læs sp. Den skal ikke sum tblRykker.Saldo
overchord: læs sp. Det skal være en (1) SQL streng, som kun forespørger i tabeller (pga. de relevante tabeller skal gives dynamisk)
OK - bare for at undgå flere misforståelser: Medmindre jeg har overset noget meget logisk, så er det IKKE et sp. om "bare" at trykke på sum-knappen og så aggregere løs! Jeg har løst problemet ved at lave 3Q:
Q1 (finder maks-dato pr. konto) SELECT tblRykker.Konto, Max(tblRykker.Dato) AS MaksOfDato FROM tblRykker GROUP BY tblRykker.Konto;
Q2 (finder saldoen for den pågældende konto på pågældende dato - dvs. maksdato): SELECT Q1.Konto, tblRykker.Dato, tblRykker.Saldo FROM Q1 INNER JOIN tblRykker ON (Q1.Konto = tblRykker.Konto) AND (Q1.MaksOfDato = tblRykker.Dato);
Q3: SELECT tblKONTO.KONTONR, tblKONTO.SALDO, Q2.Dato AS RykkerDato, Q2.Saldo AS RykkerSaldo FROM Q2 RIGHT JOIN tblKONTO ON Q2.Konto = tblKONTO.KONTONR;
Dette giver det rigtige resultat. Hvordan samles ovenstående 3 queryes i een ???
Har læst spørgsmålet, og udført opgaven som spørgsmålet er formuleret ( saldo fremgår at begge tabeller, derfor et resultat med saldo for begge ) ...
Og du kan fortsat nøjes med een query ...
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Max(tblRykker.Dato) AS [Seneste rykker] FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.