Permalänk
Medlem

Behöver lite hjälp med SQL-kod

Sitter med MS SSMS och Northwind och labbar lite.
Jag undrar om det går att Joina två tabeller samtidigt som jag vill ha det senaste (högsta) OrderID för varje kund.

Jag vill alltså inte få ut någon kund fler än en gång. Och jag vill ha det största ordernumret för varje kund.

Så här långt har jag kommit just nu, och jag inser att det saknas några rader

SELECT ORDERID, COMPANYNAME, City FROM ORDERS LEFT JOIN CUSTOMERS ON Customers.Customerid = orders.Customerid;

Spontant tänker jag att det handlar om att välja ut rader, men hur?

Visa signatur

There is always a price to pay for convenient

Permalänk
Medlem

Nu spelar jag på bortaplan, men kan inte SELECT MAX(orderId), ... FROM ... GROUP BY orderId fungera?

EDIT: GROUP BY customerId ska det givetvis vara
(insert dålig bortförklaring här)

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

@LemonIllusion:
Ser väl logiskt ut. Ska prova lite, tack!

Visa signatur

There is always a price to pay for convenient

Permalänk
Medlem
Skrivet av LemonIllusion:

Nu spelar jag på bortaplan, men kan inte SELECT MAX(orderId), ... FROM ... GROUP BY orderId fungera?

Tror du får köra GROUP BY Customerid, men annars tycker jag också detta borde fungera!

Permalänk
Medlem
Skrivet av Chimo:

Tror du får köra GROUP BY Customerid, men annars tycker jag också detta borde fungera!

Haha ja det låter ju betydligt smartare. Annars får man bra tråkiga svar. Tur någon läser vad man menar istället för vad man skriver.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

Får det inte att funka riktigt. Testar jag med endast OrderID så funkar det, men jag vill även göra kopplingen så att jag kan få ut CompanyName.

Testade detta men min kunskap om hur syntaxen fungerar brister en del.

SELECT Max(OrderID), CompanyName FROM Orders GROUP BY OrderID LEFT JOIN CUSTOMERS ON Customers.Customerid = orders.Customerid;

Visa signatur

There is always a price to pay for convenient

Permalänk
Medlem

@LemonIllusion:
@Chimo:

Tack ska ni ha, jag fick det att funka nu

Så här blev det:

SELECT Max(OrderID), CompanyNAme FROM Orders LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID GROUP BY CompanyNAme

Visa signatur

There is always a price to pay for convenient

Permalänk
Medlem
Skrivet av smkr:

@LemonIllusion:
@Chimo:

Tack ska ni ha, jag fick det att funka nu

Så här blev det:

SELECT Max(OrderID), CompanyNAme FROM Orders LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID GROUP BY CompanyNAme

Det där kommer bara fungera så länge CompanyName är unik. Gör som jag och @Chimo föreslog och gruppera på CustomerID istället.

http://sqlfiddle.com/#!9/6e8ff3/1/0

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.