05. april 2001 - 16:25Der er
6 kommentarer og 1 løsning
SELECT med kriterier - HASTER
Jeg har en tabel TimeContainer med bl.a. ID(primær nøgle - autonr), EmployeeID (heltal), TCDate(heltal eks. 20010404) og TIME (heltal/milisekunder eks. 986372155675 timestamp for hvornår denne post er gemt).
Det skal her nævnes at der kan være flere poster med samme TCDate og samme EmployeeID men med forskellige Time.
Eksisterende SQL:
SELECT * FROM tbl_TimeContainer WHERE TCDate >= fromDate AND TCDate <= toDate AND EmployeeID = employeeID ORDER BY TCDate
(fromDate, toDate og employeeID er varibler som trækkes med ind i SQL Statementet fra GUI\'en)
Problem: når jeg nu beder om denne liste giver den mig alle posterne for den valgte EmployeeID mellem fromDate og toDate dvs. at jeg godt kan ricikere at få flere poster for den samme medarbejder på den samme dag MEN jeg er kun interesseret i at få en post pr. medarbejder pr. dag og det skal være den post som sidst er indtastet dvs. der hvor Time er nyest.... Hvad skal jeg tilføje i min SELECT ???
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
SELECT DISTINCT(EmployeeId), fromdate, todate FROM tbl_TimeContainer WHERE TCDate >= fromDate AND TCDate <= toDate AND EmployeeID = employeeID ORDER BY TCDate
DISTINCT(EmployeeId), fromdate, todate Skal være en liste med alle de felter du skal bruge.
Umiddelbart virker den sætning som du har lavet godt.. men når jeg tilføjer Time
SELECT DISTINCT(EmployeeId), fromDate, toDate, TCDate, Time FROM tbl_TimeContainer WHERE TCDate >= fromDate AND TCDate <= toDate AND EmployeeID = 120 ORDER BY TCDate;
bliver bliver flere poster fra samme dag listet da de har forskellige Time...
Det blev bedre men jeg har stadigvæk problemer... sagen er at jeg har flere felter i tabellen så som TCMeetingTime, TCGoingTime m.fl. hvis disse felter så er indeholder forskellige værdier for den samme EmployeeID og den samme TCDate tager min forespørgsel alle poster med hvor f.eks. TCMeetingTime ikke er ens... men jeg vil kun have en post pr. EmployeeID pr. TCDate og det skal være den hvor Time er nyest som tidligere beskrevet. (iøvrigt skal jeg også have de nye felter med i den sidste linje GROUP BY før jeg kan køre forespørgslen.. ! er det den rigtige måde at gøre det på ?)
SELECT EmployeeID, TCDate, TCMonth, TCYear, TCMeetingTime, Max(TCTypedByTime) AS mTime FROM tbl_TimeContainer WHERE TCDate Between fromDate And toDate AND EmployeeID = 120 GROUP BY EmployeeId, TCDate, TCMonth, TCYear, TCMeetingTime;
Du bliver nødt til at lave den forespørgsel, som jeg angav, som den er... Den angiver hvilke records, der skal hentes yderligere oplysninger fra. (jeg går ud fra at du gemmer den som \"qry_mTime\")
Derefter tager du og laver en ny forespørgsel, som så henter de oplysninger, du skal bruge.
SELECT T.* FROM tbl_TimeContainer AS T, qry_mTime AS Q WHERE T.EmployeeID=Q.EmployeeID AND T.TCDate=Q.TCDate AND T.TCTypedByTime=Q.mTime
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.