Skulle behöva lite hjälp med SQL. SELECT Personer.ID, Personer.Namn, (SELECT TOP 1 Projekt.ID Tackar, men är det inte möjligt att skapa lite effektivare SQL som inte ställer så många frågor? Detta borde ge det: SELECT Personer.Namn, MAX(Projekt.Datum) As LastDate Hej igen! Såhär kanske... ok, tack. Helt riktigt, jag slutade nog tänka där på slutet...;) Du sparar ned frågan/vy'n: Hej och tack! Lägg till räknaren i ORDER BY:SQL: Senaste datumet?
Två tabeller:
Personer
---------------
ID | Namn
Projekt
------------
ID | Datum | PersonFKID (=id för den person som ansvarade för projektet)
Nu vill jag ställa en fråga som listar alla personers namn samt det senaste projektet de ansvarade för. Hur ser den frågan ut?Sv: SQL: Senaste datumet?
FROM Projekt
WHERE Projekt.PersonFKID = Personer.ID
ORDER BY Projekt.Datum DESC) As LastProject
FROM PersonerSv: SQL: Senaste datumet?
Rättelse: Det var Alla personers namn + datumet för deras senaste projekt jag ville ha.
Nuvarande sql:
SELECT Personer.Namn, Projekt.Datum
FROM Personer INNER JOIN Projekt ON Personer.ID = Projekt.PersonFKID;
Denna listar ju alla projekt med dess personer, hur skulle det se ut om man modifierade denna för att få önskat resultat?
Tackar för hjälpen
mvh MagnusSv: SQL: Senaste datumet?
SELECT Personer.Namn, MAX(Projekt.Datum)
FROM Personer INNER JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Person.ID, Person.Namn
Vill du även ha med de personer som inte har haft något projekt gör du såhär:
SELECT Personer.Namn, MAX(Projekt.Datum)
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Person.ID, Person.Namn
/JohanSv: SQL: Senaste datumet?
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Personer.Namn
Om det förekommer personer med samma namn:
SELECT Personer.ID, Personer.Namn, MAX(Projekt.Datum) As LastDate
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Personer.Namn, Personer.ID Sv: SQL: Senaste datumet?
om jag nu använder följande sql:
SELECT Personer.Namn, MAX(Projekt.Datum) As LastDate
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Personer.Namn
och dessutom vill ha med ett annat fält från projekt-tabellen, låt oss säga att varje projekt har ett namn dessutom så vill jag även ha med namnet på det senaste projektet. Hur göra?
mvh MagnusSv: SQL: Senaste datumet?
<code>
SELECT Personer.Namn, Projekt.Datum, Projekt.Namn
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
WHERE Projekt.DAtum IN (
SELECT MAX(Projekt.Datum) As LastDate
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
GROUP BY Personer.Namn
)
</code>
/JohanSv: SQL: Senaste datumet?
Men håller den verkligen? Om flera projekt har samma datum ?
Menar bara: är det inte farligt att identifiera projektet med datum där på slutet?Sv: SQL: Senaste datumet?
Såhär testar vi istället då, det känns som att det borde gå att göra på något bättre sätt, men jag kommer inte på det nu bara...
<code>
SELECT Personer.Namn, Projekt.Datum, Projekt.Namn
FROM Personer LEFT JOIN Projekt ON Personer.ID = Projekt.PersonFKID
WHERE Projekt.ID IN (
SELECT (
SELECT TOP 1 ID
FROM Projekt B
WHERE B.PersonFKID = A.PersonFKID
ORDER BY Datum DESC
)
FROM Projekt A
GROUP BY PersonFKID
)
</code>
/JohanSv: SQL: Senaste datumet?
qryPersonerLastProject
SELECT Personer.*, (SELECT TOP 1 Projekt.ID
FROM Projekt
WHERE Projekt.PersonFKID = Personer.ID
ORDER BY Projekt.Datum DESC) As LastProject
FROM Personer
Använd sedan frågan i en annan fråga:
SELECT qryPersonerLastProject.*, Projekt.Namn, Projekt.Datum
FROM qryPersonerLastProject LEFT JOIN
Projekt ON qryPersonerLastProject.LastProject = Projekt.IDSv: SQL: Senaste datumet?
Jag använde det sistnämna alternativet vilket fungerar bra.
Dock blir det problem när det finns fler rader med det senaste datumet.
Då får jag felmeddelandet att underfrågan inte kan returnera flera rader.
Hur löser jag detta?
mvh MagnusSv: SQL: Senaste datumet?
qryPersonerLastProject
SELECT Personer.*, (SELECT TOP 1 Projekt.ID
FROM Projekt
WHERE Projekt.PersonFKID = Personer.ID
ORDER BY Projekt.Datum DESC, Projekt.ID) As LastProject
FROM Personer
På så sätt blir posterna unika.