03. november 2006 - 09:41Der er
7 kommentarer og 1 løsning
Select og sammenlign data i samme tabel
Jeg skal have udvalgt de numre(no) fra tabel1, hvor der ikke er en dato med teksten "print", som er nyere end et felt med teksten "faktura", samtidig med at der i tabel2 er data på de samme numre(no). D.v.s at jeg vil have fundet følgende "no": 1
Det kan være at nedenstående skal justeres lidt. Nedenstående giver dig alle records i Tabel1 som er kommet efter den seneste 'print', hvor der findes en relateret record i Tabel2. Er det hvad du ønsker?
select * from Tabel1 t1 inner join Tabel2 t2 on t1.no = t2.no where t1.Dato > (Select Max(Dato) from Tabel1 where Tekst = 'print' and no = t1.no)
Det virker! Der er blot følgende problem, at hvis dataene ser ud som følgende, får jeg følgende output: 1, 1 Jeg kan ikke lige gennemskue, hvordan det løses. Der er desuden højst en record i tabel 2 med det samme nummer(no).
Så er jeg ikke helst sikker på jeg forstår hvad du mener. Jeg forsøgte at oprætte dine tabeller, og kørte sql'en, og fik det svar jeg havde forventet. Kan du forklare lidt mere detaljeret hvad der ikke passer?
Det er mig der ikke har forklaret det korrekt. Nogle af dataene ser ud som følgende, hvilket betyder at jeg får begge records med * frem i min søgning. Jeg har kun brug for den nyeste :-)
Select t1.* From Tabel1 t1 inner join (select [No], max(Dato) NyesteDato from Tabel1 group by No) tt1 on t1.No = tt1.No and t1.Dato = tt1.NyesteDato inner join Tabel2 t2 on t1.no = t2.no where t1.Dato > (Select Max(Dato) from Tabel1 where Tekst = 'print' and no = t1.no)
alternativt kan du bytte di where med:
where t1.Tekst <> 'print'
Den sidste kan du benytte, hvis du bruger klokkeslet på din Dato, således at Dato altid vil være unikt indenfor hvert no. I dit første eksempel har du en print og en faktura den 13.3. Hvis disse ikke kan skilles fra hinanden, skal du bruge den første Where. Hvis du har et klokkeslet på datoen, således at det er mulig at se hvilken som kom først af print og faktura den 13.3.06 på no 2, vil den sidste where være mest effektiv.
Hvis du kan have to linier med anden tekst end print på samme dato på et enkelt no, og disse ikke kan skilles fra hinanden på tid, vil ovenstående sql skulle modificeres lidt mere, da den ikke checker om der er f.eks. to fakturalinier på identisk dato på samme no. I så fald, vil du få to liner på et no.
Det virker, det er jo super :-) Tusind tak og her er velfortjente point.
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.