Hej! SELECT tabell.Id, tabell.Artikel, tabell.Antal, tabell.Pris FROM tabell INNER JOIN (SELECT Artikel, Antal, Min(Pris) FROM tabell GROUP BY Artikel, Antal) AS sub ON tabell.Artikel = sub.Artikel AND tabell.Antal = sub.Antal AND tabell.Pris = sub.Pris Tack för svaret. Dett fins varianter men det är samma princip. Det ska väl inte spela någon roll egentligen om det är en join eller "subquery". Beror naturligtvis på databashanteraren, men en bra sådan ska likställa frågorna och ge samma exekveringsplan och därmed samma exekveringstid. Ännu en variant bland alla andra varianter, man blir rent snurrig ........... ;-) Tyvärr kan den frågan retunerar den fel resultat. <b>Andreas:</b>Hjälp med sql fråga
Har problem att få ihop en sql fråga.
Har en tabell som ser ut så här
Id | Artikel | Antal | Pris
---------------------------------------
10 10-1 1 39
10 10-1 5 35
15 10-1 1 49
15 10-1 5 29
10 12-3 1 12
Tabellen beskriver artiklars priser på olika prislistor. Id är listans namn och priset är kostnaden/styck vid köp av det antal som står i antals kolumnen.
Nu vill jag skriva en fråga som tar ut de bästa priserna i varje antal per artikel. Alltså en fråga som ger detta svar:
Id | Artikel | Antal | Pris
---------------------------------------
10 10-1 1 39
15 10-1 5 29
10 12-3 1 12
Min fråga ser ut så här:
SELECT Id, Artikel, Antal, Min(Pris) FROM tabell
GROUP BY Artikel, Antal.
Problemet är att jag inte kan få med Id i selecten eftersom den då klagar på att den måste vara med i group by villkoret vilket jag inte vill eftersom jag vill har lägsta pris för antalet oavsätt Id.
Hur kan jag lösa detta?Sv: Hjälp med sql fråga
/JohanSv:Hjälp med sql fråga
Nu gör man ju en "sub-tabell" utan id´et o joinar sen mot den. Känns lite "fult" att joina mot en "icke-nyckel" som pris som i detta falla är av typen decimal med 4 decimaler. Finns det något annat sätt att formulera sql´en för att slippa detta?Sv: Hjälp med sql fråga
SELECT tabell.Id, tabell.Artikel, tabell.Antal, tabell.Pris
FROM tabell
WHERE tabell.Pris =
(SELECT Min(SubPris) MinPris
FROM tabell AS Sub
WHERE
tabell.Artikel = sub.Artikel AND
tabell.Antal = sub.Antal)
Det känns som Johans fråga är bättre då jag har för mig att underfrågan måste utföras för varje rad.
Index hjälper.
Om du lagrar pris som heltal i ören så skulle du kanske få bättre prestanda.
Sv: Hjälp med sql fråga
Men naturligtvis kan man ge den lite tips om det går...Sv: Hjälp med sql fråga
Principipen är och förblir densamma, som Andreas skrev.
SELECT Id, Artikel, Antal, Pris
FROM tabell
WHERE Pris IN (SELECT MIN(Pris) FROM tabell GROUP BY Artikel, Antal)
//Håkan
Sv:Hjälp med sql fråga
Pris kan bar tillsaman med artikel och antal identifiera en post.
Om ett pris för en artikel motsvara det lägsta för en annan kommer problem att uppstå.
Så för att frågan skall fungera måste samtliga pris belopp vara unika.Sv: Hjälp med sql fråga
Jamenvisst är det så!!
Bra att du uppmärksammade det.
Slarvigt genomtänkt av mig... :-(
//Håkan