sql >> Database >  >> RDS >> Mysql

Alle rijen met specifieke kolommen tellen en per week groeperen

Uw zoekopdracht is niet deterministisch, dus het is niet verwonderlijk dat u onverwachte resultaten krijgt. Hiermee bedoel ik dat je deze query 5 keer op dezelfde gegevens kunt uitvoeren en 5 verschillende resultatensets kunt krijgen. Dit komt doordat u DATE(timestamp) . selecteert maar groeperen op WEEK(DATE(startdate)) , de zoekopdracht retourneert daarom de tijd van de eerste rij die hij tegenkomt per startdatumweek in ANY bestellen.

Houd rekening met de volgende 2 rijen (met tijdstempel in datumnotatie voor leesgemak):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Uw zoekopdracht is gegroepeerd op WEEK(StartDate) dat is 23, aangezien beide rijen dezelfde waarde opleveren, zou je verwachten dat je resultaten 1 rij hebben met een telling van 2.

Echter DATE(Timestamp) Staat ook in de select lijst en aangezien er geen ORDER BY . is statement de query heeft geen idee welk tijdstempel '20120601' of '20120701' moet retourneren. Dus zelfs met deze kleine resultatenset heb je een kans van 50:50 om:

TimeStamp       COUNT
20120601        2

en een kans van 50:50 om

TimeStamp       COUNT
20120701        2

Als u als volgt meer gegevens aan de gegevensset toevoegt:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Je zou kunnen krijgen

TimeStamp       COUNT
20120601        2
20120701        1

of

TimeStamp       COUNT
20120701        2
20120701        1

U kunt zien hoe u met 37.000.000 rijen snel resultaten krijgt die u niet verwacht en niet kunt voorspellen!

BEWERKEN

Aangezien het lijkt alsof u de weekstart in uw resultaten probeert te krijgen, kunt u groepsgewijs de volgende gebruiken om de weekstart te krijgen (vervang CURRENT_TIMESTAMP door de gewenste kolom):

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

Je kunt dan ook op deze datum groeperen om wekelijkse resultaten te krijgen en te voorkomen dat je dingen in je selectielijst hebt staan ​​die niet in je groep staan ​​op.



  1. Fout 1005 in MySQL (van externe sleutelsyntaxis?)

  2. Maak een SQL Server-database met SQLOPS

  3. Java - zoek de eerste oorzaak van een uitzondering

  4. Mysql-dumps en -importen versnellen