25. september 2007 - 13:18Der er
12 kommentarer og 1 løsning
Søg efter personer som mangler at sende data
Hej alle SQL eksperter :).. da dette ikke ligefrem er mit område har jeg et spørgsmål.
Vi har ca 100 butikker som indraportere data vedrørende kundetælling. (de indraportere hver time)
jeg vil lave en søge sætning der gør følgende.
Den skal kunne vise hvilke butikker der IKKE har indraporteret data de sidste 48 timer fra dags dato. den skal kun vise butikkens navn og butiksID en gang.
altså hvis de ikke har indraporteret data skal den skrive hvilke butikker der ikke har, alle der har indraporteret data er jeg ligeglad med.
Sorry hvis dette lyder lettere forvirende, men det er jeg også :P
Konceptuelt: select * from tblMedAlleButikker where not exits (Select distinct ButiksNr From tblKundetælling where ButiksNr = tblMedAlleButikker.ButiksNr)
Tja, lidt info om hvilke tabeller du har og hvilke felter der findes i dem ville være godt.
En præcisering af "de sidste 48 timer fra dags dato" ville også være godt. Mener du 48 timer fra nu (tidspunktet nu), dette døgn og de 2 forgående eller noget helt tredie.
Men jeg brygger lige lidt uden info...
Hvis vi går ud fra at du har følgende tabeller: - Butikker (id, navn) - Hentede_data (id, butik_id, dato, kundetal) Og vil vide for 48 timer bagud fra lige nu.
Så kan vi prøve noget i den her stil... :
SELECT id, navn FROM butikker WHERE id NOT IN (SELECT DISTINCT butik_id FROM Hentede_data WHERE dato > CURRENT_TIMESTAMP - 2)
Sorry, exists, var fejl skrevet, jeg skrev exits, og det skal være exists.
Det er flere måder at løse problemet på, men du skal have en select som starter med alle dine butikker, og på en eller anden måde fjærner de butikker som du har fået data fra. Ovenstående burde også begrænses til at teste på tid, indenfor 48 timer;
select * from tblMedAlleButikker where not exits (Select distinct ButiksNr From tblKundetælling where ButiksNr = tblMedAlleButikker.ButiksNr Where date > DateAdd(day,-2,getdate()))
SELECT * FROM tblMedAlleButikker b WHERE NOT EXISTS ( SELECT SHOPID FROM ( SELECT DISTINCT SHOPID FROM tblKundetælling WHERE TIME >= DATEADD(day, -2, GetDate()) ) a WHERE a.SHIOPID = b.SHOPID )
Den inderste select laver en liste med alle butikker som har haft kundetælling resultater indenfor de sidste to døgn, baseret på aktuelt tidspunkt som jeg henter med GetDate().
Resultatet herfra bruger jeg i en NOT EXISTS, for at frasortere de butikker som har returneret data.
jeg siger mange tak lorntsnv, det virker næsten helt operfekt :).. men laver lige et spørgsmål mere ;).. du kan jo se om du også kan løse den
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.