returnerer 20-12-2001 og IKKE 20-11-2001, da station_id 4 ikke har en entry d. 20-11-2001
lige nu laver jeg en frygtelig grim én, hvor jeg hiver listen af dato'er for den færste station i listen og derefter tjekker om alle stationer har en entry for hver enkelt dato :(
SELECT DISTINCT D1.dato FROM tests AS D1 WHERE EXISTS(SElect 1 from tests D2 WHERE D1.dato = D2.dato and D2.station_id = 2) AND EXISTS (SElect 1 from tests D2 WHERE D1.dato = D2.dato and D2.station_id = 3) AND EXISTS (SElect 1 from testsD2 WHERE D1.dato = D2.dato and D2.station_id = 4)
SELECT DISTINCT D1.dato FROM tests AS D1 WHERE EXISTS(SElect * from tests D2 WHERE D1.dato = D2.dato and D2.station_id = 2) AND EXISTS (SElect * from tests D2 WHERE D1.dato = D2.dato and D2.station_id = 3) AND EXISTS (SElect * from testsD2 WHERE D1.dato = D2.dato and D2.station_id = 4)
SELECT dato FROM tests d1, tests d2, tests, d3, tests d4 WHERE d1.dato=d2.dato AND d2.dato=d3.dato AND d3.dato=d4.dato AND d1.station_id=1 AND d2.station_id=2 AND d3.station_id=3 AND d4.station_id=4;
muligvis (skal testes !) vil den være hurtigere end EXISTS.
Ingen grund til at gøre det så besværligt, det klares nemt og hurtigt med et derived table:
select a.date from ( select [date], station_id from tests where station_id in (4,2,3) group by [date], station_id ) as a where station_id in (4,2,3) group by a.date having count(*) = 3
Hvor "tests" er din tabel med data, husk at korrigere having count = antallet af station_id's
Ikke noget specielt! Ikke andet end du laver 3 exists som subselects og bagefter distincter resultatet. Det er ikke så performance venligt :O)
Synes godt om
Slettet bruger
17. september 2003 - 23:20#7
dog er det ikke så fedt at den benytter count, da station kan optræde flere gange på samme dag, men nu har jeg fået fornyet inspiration, tak!
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.