sql >> Databasteknik >  >> RDS >> Mysql

Räknar alla rader med specifika kolumner och grupperar efter vecka

Din fråga är icke-deterministisk så det är inte förvånande att du får oväntade resultat. Med detta menar jag att du kan köra den här frågan på samma data 5 gånger och få 5 olika resultatuppsättningar. Detta beror på att du väljer DATE(timestamp) men gruppering efter WEEK(DATE(startdate)) , frågan returnerar därför tiden för den första raden den stöter på per startdatumvecka i ANY beställa.

Tänk på följande 2 rader (med tidsstämpel i datumformat för enkel läsning):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Din fråga grupperas efter WEEK(StartDate) vilket är 23, eftersom båda raderna utvärderas till samma värde skulle du förvänta dig att dina resultat skulle ha 1 rad med ett antal 2.

MEN DATE(Timestamp) Finns också i urvalslistan och eftersom det inte finns någon ORDER BY satsen frågan har ingen aning om vilken tidsstämpel som ska returnera '20120601' eller '20120701'. Så även på denna lilla resultatuppsättning har du en 50:50 chans att få:

TimeStamp       COUNT
20120601        2

och en 50:50 chans att få

TimeStamp       COUNT
20120701        2

Om du lägger till mer data till datamängden som så:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Du kan få

TimeStamp       COUNT
20120601        2
20120701        1

eller

TimeStamp       COUNT
20120701        2
20120701        1

Du kan se hur du med 37 000 000 rader snart kommer att få resultat som du inte förväntar dig och inte kan förutse!

REDIGERA

Eftersom det ser ut som att du försöker få veckostart i dina resultat, medan du grupp för vecka kan använda följande för att få veckostart (ersätter CURRENT_TIMESTAMP med vilken kolumn du vill):

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

Du kan sedan gruppera efter detta datum också för att få veckoresultat och undvika besväret med att ha saker i din urvalslista som inte finns i din grupp senast.



  1. Gruppera efter år i datumfält i MySQL

  2. Hibernate, id, orakel, sekvens

  3. Bästa DBaaS-lösningar för PostgreSQL

  4. Jag vill återställa databasen med ett annat schema