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

Conteggio di tutte le righe con colonne specifiche e raggruppamento per settimana

La tua query non è deterministica, quindi non sorprende che tu stia ottenendo risultati inaspettati. Con questo intendo dire che potresti eseguire questa query sugli stessi dati 5 volte e ottenere 5 diversi set di risultati. Ciò è dovuto al fatto che stai selezionando DATE(timestamp) ma raggruppando per WEEK(DATE(startdate)) , la query restituisce quindi l'ora della prima riga che incontra per settimana di data di inizio in ANY ordine.

Considera le 2 righe seguenti (con timestamp in formato data per facilitarne la lettura):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

La tua query è raggruppata per WEEK(StartDate) che è 23, poiché entrambe le righe restituiscono lo stesso valore, ti aspetteresti che i tuoi risultati abbiano 1 riga con un conteggio di 2.

COMUNQUE DATE(Timestamp) È anche nell'elenco selezionato e poiché non esiste ORDER BY istruzione la query non ha idea di quale timestamp restituire '20120601' o '20120701'. Quindi, anche su questo piccolo set di risultati hai una possibilità del 50:50 di ottenere:

TimeStamp       COUNT
20120601        2

e una possibilità di 50:50 di ottenere

TimeStamp       COUNT
20120701        2

Se aggiungi più dati al set di dati in questo modo:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Potresti ottenere

TimeStamp       COUNT
20120601        2
20120701        1

o

TimeStamp       COUNT
20120701        2
20120701        1

Puoi vedere come con 37.000.000 di righe otterrai presto risultati che non ti aspetti e non puoi prevedere!

MODIFICA

Poiché sembra che tu stia cercando di ottenere l'inizio della settimana nei risultati, mentre raggruppa per settimana potresti utilizzare quanto segue per ottenere l'inizio della settimana (sostituendo CURRENT_TIMESTAMP con la colonna che desideri):

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

Puoi quindi raggruppare anche per questa data per ottenere risultati settimanali ed evitare il problema di avere cose nell'elenco selezionato che non sono nel tuo gruppo per.