sql >> Database teknologi >  >> RDS >> Mysql

Tæller alle rækker med specifikke kolonner og gruppering efter uge

Din forespørgsel er ikke-deterministisk, så det er ikke overraskende, at du får uventede resultater. Med dette mener jeg, at du kunne køre denne forespørgsel på de samme data 5 gange og få 5 forskellige resultatsæt. Dette skyldes, at du vælger DATE(timestamp) men gruppering efter WEEK(DATE(startdate)) , forespørgslen returnerer derfor tidspunktet for den første række, den støder på pr. startdatouge i ANY bestille.

Overvej følgende 2 rækker (med tidsstempel i datoformat for nem læsning):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Din forespørgsel grupperes efter WEEK(StartDate) hvilket er 23, da begge rækker evalueres til den samme værdi, ville du forvente, at dine resultater har 1 række med et antal på 2.

DOG DATE(timestamp) Er også på udvalgslisten og da der ikke er nogen ORDER BY sætning forespørgslen har ingen idé om, hvilket tidsstempel der skal returnere '20120601' eller '20120701'. Så selv på dette lille resultatsæt har du en 50:50 chance for at få:

TimeStamp       COUNT
20120601        2

og en 50:50 chance for at få

TimeStamp       COUNT
20120701        2

Hvis du tilføjer flere data til datasættet som sådan:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Du kunne få

TimeStamp       COUNT
20120601        2
20120701        1

eller

TimeStamp       COUNT
20120701        2
20120701        1

Du kan se, hvordan du med 37.000.000 rækker snart vil få resultater, som du ikke forventer og ikke kan forudsige!

REDIGER

Da det ser ud til, at du forsøger at få ugestart i dine resultater, mens du gruppe for uge kan bruge følgende til at få ugestart (erstat CURRENT_TIMESTAMP med den kolonne, du ønsker):

SELECT  DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart

Du kan derefter gruppere inden for denne dato også for at få ugentlige resultater og undgå besværet med at have ting på din udvalgte liste, som ikke er i din gruppe inden.



  1. Hvorfor er PostgreSQL-arrayadgang så meget hurtigere i C end i PL/pgSQL?

  2. Delphi XE5 FireDAC-fejl:Kan ikke indlæse leverandørbibliotek [libmysql.dll eller libmysqld.dll]

  3. Udelukker ikke-understøttede tabeller, der skal optages af Oracle Streams

  4. Data gemmes ikke ved hjælp af udarbejdede erklæringer