30. september 2008 - 07:16Der er
15 kommentarer og 1 løsning
Tricky query
Jeg har en tabel CenterID, TimeStamp, KabineNo, Dato, Tid Her vil jeg gerne kunne vælge de records for hvert center der er nyest (med det 'højeste' timestamp) Men da der kan være forskelligt antal records for hvert CenterID, kan jeg ikke lige gennemskue hvordan den kringles.
Den returnerer kun 1 record for hvert CenterID, men jeg kan have op til 20 jeg skal bruge. Det er nogle tællere (kroner) for hver kabine der skal bruges til at finde indtjening, men i nogle centre kan disse tællere blive resat op til flere gange om dagen og så har jeg balladen.
For hvert CenterID er der x antal records for kabiner - disse er timestampet med samme dato/tid Det jeg skal bruge er den samling data for hvert center med nyeste/samme timestamp
Måske skal jeg lige lave et udtræk for et par centre til en xls fil som jeg kan sende til dig i morgen så du kan se data - det kan nogen gange hjælpe.
SELECT * FROM dinTabel t WHERE TimeStamp = (SELECT MAX(TimeStamp) FROM dinTabel WHERE CenterID=t.CenterID)
eller alternativt (heller ikke testet):
SELECT t1.* FROM dinTabel t1 INNER JOIN ( SELECT CenterID, MAX(TimeStamp) AS MaxTimeStamp FROM dinTabel GROUP BY CenterID ) t2 ON t1.CenterID=t2.CenterID AND t1.TimeStamp=t2.MaxTimeStamp
En af disse løsninger burde virke, men som sagt er ingen af dem testede (det må blive din opgave). :-)
Det sidste forslag er det nærmeste jeg er kommet, men ikke helt godt nok. Den returnerer kun 1 dato pr. centerID og jeg har brug for alle datoer pr centerID men kun den nyeste. Måske bliver løsningen på problemet at jeg må klare det i importfunktionen
Jeg synes heller ikke, at din forklaring i 12:31:21 er meget klarere!
Det må blive et skud i tågen, men jeg lægger mærke til, at du nu omtaler dato som et kriterie, så jeg prøver lige at tage det felt med:
SELECT t1.* FROM dinTabel t1 INNER JOIN ( SELECT CenterID, Dato, MAX(TimeStamp) AS MaxTimeStamp FROM dinTabel GROUP BY CenterID, Dato ) t2 ON t1.CenterID=t2.CenterID AND t1.Dato=t2.Dato t1.TimeStamp=t2.MaxTimeStamp
Hvis det ikke er svaret heller, kunne du måske offentliggøre et udsnit af data fra din tabell, og de rækker fra dette dataudsnit du ønsker returneret.
Jeg ved godt at forklaringen måske ikke er 100% gennemskuelig, så jeg skal gerne gøre et forsøg mere. Hvert center består af x antal kabiner og for hver af disse kabiner er der 1 record med aflæsninger. Disse records opstår ved at en centerpasser trykker på en knap når han/hun tager penge ud af boksen. I nogle centre sker det så at der tages penge ud flere gange om dagen og derfor er der flere sæt records for den dag. Det jeg skal ende op med at have er et udvalg af data for hvert center der repræsenterer den sidste aflæsning hver dag. Jeg ved ikke på forhånd hvor mange records der er pr. center eller hvor mange aflæsninger der har været på en dag.
Jeg har en fil med nogle data i et Excel ark hvor de uønskede data er markeret med rødt. Dem kan jeg sende i en mail hvis du har interesse i det.
De sidste problemer der er med data er ikke noget denne query kan gøre noget ved (der er nogle records hvor timestamp burde være det samme, men der er 1 sek. forskel)
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.