2011-09-25 9 views
5

Ho un database come questo:MySQL trovare il modo di più sottoinsiemi

custNum   date  purchase  dayOfWeek 
    333   2001-01-01 23.23   1 
    333   2001-03-04 34.56   5 
    345   2008-02-02 22.55   3 
    345   2008-04-05 12.35   6 
    ...   ...   ...   ... 

Sto cercando di ottenere la modalità (massimo valore si verificano di frequente) per la colonna dayOfWeek per ogni cliente. Fondamentalmente sarebbe il giorno della settimana in cui ogni cliente negozierà di più. Mi piace:

custNum   max(count(dayofweek(date))) 
333     5 
345     3 
356     2 
388     7 
...     ... 

Qualsiasi aiuto sarebbe fantastico grazie.

+0

Come si identifica un acquisto: qual è la chiave principale? C'è un campo 'purchaseId' che non ci hai mostrato? –

+0

no, questo è l'intero db. – screechOwl

+0

Allora che cos'è PK? È {custNum, data}? In tal caso, come si fa a distinguere tra due acquisti effettuati da uno stesso utente nello stesso giorno? Li sommi insieme nella stessa fila? –

risposta

3
select custNum, dayOfWeek 
from tableName t 
group by custNum, dayOfWeek 
having dayOfWeek = (
    select dayOfWeek 
    from tableName 
    where custNum = t.custNum 
    group by dayOfWeek 
    order by count(*) desc, dayOfWeek 
    limit 1 
) 
Problemi correlati