12. januar 2007 - 23:14
Der er
2 kommentarer og
1 løsning
Access til MySQL
Hvordan laver man følgende Access-SQL-sætning i MySQL ?
SELECT Last(bog.ID) AS Sidstebog,.....
13. januar 2007 - 01:07
#1
Det kan du mig bekendt ikke, da First og Last er funktioner, som ikke forekommer i standard SQL, men er specifikke for Access. I dit tilfælde, hvor jeg går ud fra, at Id er et autonummerfelt, som kører opad hele tiden, kan du dog sikkert bruge MAX funktionen i stedet.
Men hvis du bruger Last funktionen på andre felter også for at få data fra den sidste række, som svarer til det du grupperer på, er du på den.
Hvis du f.eks. har et sætning som:
SELECT ordrenummer, LAST(varenummer) AS SidsteVarenummer, LAST(varetekst) AS SidsteVaretekst, LAST(pris) AS SidsteVarepris, SUM(liniebeløb) AS OrdreBeløb
FROM Ordrer
GROUP BY ordrenummer
kan du ikke bare erstatte Last med Max, da MAX modsat Last behandler feltet, hvor Last behandler rækken under et.
Igen, hvis tabellen har et Id nummer i fortløbende sekvens, kunne en løsningsmodel være noget a.la:
SELECT o1.ordrenummer, o2.varenummer AS SidsteVarenummer, o2.varetekst AS SidsteVaretekst, SUM(o1.liniebeløb) AS OrdreBeløb
FROM Ordrer o1
INNER JOIN Ordrer o2 ON o1.ordrenummer = o2.ordrenummer
WHERE o2.Id = (SELECT MAX(o1.Id) FROM Ordrer WHERE ordrenummer = o1.ordrenummer)
GROUP BY o1.ordrenummer, o2.varenummer, o2.varetekst
Men som du kan se, bliver det dog hurtigt lidt uoverskueligt. Det kræver desuden, at MySQL understøtter subqueries, hvilket den først gør fra version 4.1
14. januar 2007 - 01:10
#2
Ja, det havde jeg frygtet... Men jeg er heldig for MAX, gjorde sagen denne gang. Eller er det bare at smøge ærmerne op og gå i krig med indlejrede SELECT. Jeg har MySQL 5.0, så det kan den. Men denne gang slap jeg med skrækken ;-)
Tak for hjælpen.
Kast et svar