25. august 2006 - 10:31Der er
9 kommentarer og 1 løsning
Sql Query
Jeg skal bruge en advanceret sql query. Forklarer bedst igennem eksempler, saa her kommer det.
Jeg har to tabller:
Person Contacts ------------------ --------------- ID NAME Person_id Date ---- ----------- ---- ---------- 1 Hans 1 15/02/2005 2 Per 1 29/03/2005 3 Ulla 1 12/01/2006 2 15/04/2006
Det jeg har brug for er en query der giver den nummebr X contakt Select bla bla bla where contactnumber=2 Skal give: --------------- Hans 29/03/2005 Per NULL Ulla NULL
Select bla bla bla where contactnumber=1 Skal give: ----------------- Hans 15/02/2005 Per 15/04/2006 Ulla NULL
Det jeg skal kunne faa frem er datoen paa aftale nummer x, dvs. hver persons aftale nummer 2 eller hver persons aftale nummer 3 etc. Hvis en person kun har haft en aftale og der bliver spurgt paa datoen for aftale 2 skal der returneres NULL. Nummeret paa aftalen bliver defineret ud fra datoen. Saa ja der skal sorteres paa datoen paa en aller anden maade.
Undskyld jeg lige siger det, men det er altså helt ude i hampen at du baserer at udtræk på en rækkefølge i en tabel der ikke engang indeholder en primærnøgle (ikke at det er umuligt, bare usædvanligt), du vil have problemer med robustheden i resultatet fra gang til gang.
Må jeg ikke anbefale dig at overholde normalformen og bygge evt. et par relationer osv. Det vil gøre det noget nemmere at komme op med en løsning :-)
Hvis det på nogen måde skal fungere ordentlig, skal du have et ekstra felt på Contacts tabellen, som indeholder aftale nummeret: [Contacts] Person_id contactNr Date 1 1 15/02/2005 1 2 29/03/2005 1 3 12/01/2006 2 1 15/04/2006
Janus, eksemplet er bare simplificeret, de "rigtige" tabeller er langt storre og har primaer nogler og foreign keys. Alle tabeller bruger primaer noglen ID som er identity columns. Maaske er det ude i hampen, men ikke desto mindre er det det jeg skal bruge.
Fennec din losning er ikke en option for mig. At skulle vedligholde den rigtige raekke folge (contact_nr) er haablost, naar man aendrer og sletter aftaler. Det vil betyde store aendringer i min applikation.
Denne Sql skal bruges til en rapport. Og skal vise ventetiden fra henvisning til x aftale.
Teepee dit svar kan ikke accepteres.
Synes godt om
Slettet bruger
28. august 2006 - 14:31#9
Måske kan denne bruges:
SELECT p.Name, y.dato FROM PERSON p LEFT OUTER JOIN ( SELECT Person_id, MAX(Date) dato FROM ( SELECT TOP 2 Person_id, Date FROM Contacts ORDER BY Date ) x GROUP BY Person_id ) y ON p.id=y.Person_id
Du får problemer med performance, når du får mange personer og skal bruge den x'ende kontakt osv. Du skal hele tiden sortere i datorangorden, tage top x for derefter at tax max(dato) for hver eneste person... men det finder du nok ud af
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.