12. april 2007 - 13:42Der er
9 kommentarer og 1 løsning
Virkelig Tricky Query 1 til mange relation
Ja, jeg sidder med en tabel (t1) der har en en shared key mellem 3 kolonner (id, startdato og slutdato), og der kan sagtens være flere med samme id, sålænge resten er unikt.
nu er mit problem at jeg gerne vel hente alle unikke id ud, men med den seneste slutdato dvs. at jeg hanter alle unikke id ud og så får jeg automatisk den med den nyeste slutdato, men ikke de andre der måtte være på det id.
Jeg er lidt usikker på om følgende går, men prøv. Det jeg er usikker på er group på en join, men jeg mener det skal kunne lade sig gøre.
Select t2.id, max(t1.startdato), t2.slutdato from t1 inner join (Select id, max(slutdato) as Slutdato from t1 group by id) t2 on t1.id = t2.id and t1.slutdato = t2.slutdato group by t2.id, t2.slutdato
Jeg kunne ikke få den til at virke, jeg har kunnet få denne her til NÆSTEN at virke, bortset fra at den ikke lader mig sortere efter slutdato og så vællger hden heller ikke den nyeste.
SELECT DISTINCT Formidlingsaftaler.hid,formidlingsaftaler.Formidling_Start, formidlingsaftaler.Formidling_Slut, hHus.hadresse, hhus.hpostnr, postnr.bynavn, maeglere.maeglerinitialer FROM Formidlingsaftaler INNER JOIN SS_EmneEjerInfo ON Formidlingsaftaler.HID = SS_EmneEjerInfo.HusID INNER JOIN Maeglere ON SS_EmneEjerInfo.Maegler = Maeglere.MaeglerID INNER JOIN hHus ON SS_EmneEjerInfo.HusID = hHus.hID INNER JOIN postnr ON hHus.hPostnr = postnr.Postnr WHERE (formidlingsaftaler.Formidling_Slut > 1000000) ORDER BY formidlingsaftaler.Formidling_Slut ASC
Håber du kan arbejde lidt videre med den, for jeg er virkelig lost
Ved ikke hvad der er bedst hastighedsmæssig, men det kan også laves på denne måde:
SELECT t1.*, (SELECT MAX(Dato) FROM tabel2 WHERE refID = t1.id) AS dato FROM Tabel1 t1 WHERE ((SELECT MAX(Dato) FROM tabel2 WHERE refID = t1.id) > GETDATE() - 31)
tallene kommer fra den "programmør" der har siddet i min stilling før mig, han synes det var totalt smart at bruge unix timestamp i asp og SQL server i stedet for den indbyggede DateTime så derfor bliver jeg nød til at konvertere enhver dato til sek fra 1/1 1970 00:00:00
2592000 svarer til 30 dage i sek. og 1176392640 var igår ved 15 tiden
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.