Sto cercando di ottenere un conteggio delle email ricevute durante un intervallo di date utilizzando MSSQL Express 2005. Ho gestito così tanto, ma ora voglio dividere i dati in ciò che è stato fatto con esso .SELECT COUNT nell'intervallo di date
Ecco quello che ho finora:
SELECT EmailAddress, COUNT(EmailAddress)
FROM mails
WHERE ReceivedTime >= DATEADD(DAY, -7, GETDATE())
GROUP BY EmailAddress
HAVING COUNT(EmailAddress) > 10
Questo mi dà un elenco di indirizzi che spediti più di 10 volte nel corso dell'ultima settimana, ma abbiamo un'altra colonna che ci dice cosa è successo con il la posta. Io sto cercando di realizzare qualcosa di simile:
SELECT EmailAddress,
COUNT(ActionTaken WHERE ActionTaken="Deleted") AS Deleted,
COUNT(ActionTaken WHERE ActionTaken="Replied") AS Replied,
COUNT(ActionTaken WHERE ActionTaken="Read") AS Read,
COUNT(EmailAddress) AS Total
FROM mails
WHERE ReceivedTime >= DATEADD(DAY, -7, GETDATE())
GROUP BY EmailAddress
HAVING COUNT(EmailAddress) > 10
Sto cercando un set di risultati in questo senso:
EmailAddress | Deleted | Replied | Read | Total
---------------------------------------------------
[email protected] | 4 | 5 | 3 | 12
[email protected] | 2 | 6 | 3 | 11
Sono abbastanza sicuro che abbia qualcosa a che fare con l'utilizzo di OVER (PARTITION BY) clausole, ma ho colpito un muro. Mi rendo conto che il campo ActionTaken non è l'ideale, ma non l'ho costruito io!
Hai solo mi ha salvato quello che sarebbe quasi certamente stato un giorno intero cercando di ottenere la mia testa intorno le funzioni di aggregazione per il bene di qualcosa che sembra così semplice ora lo vedo! Grazie, funziona perfettamente! – timbstoke
@timbstoke - Felice di aiutare. Puoi anche usare 'PIVOT', ma preferisco il metodo' CASE' come più facile da ricordare e più flessibile. Inoltre con 'PIVOT' l'aggiunta di ulteriori colonne alla tabella di base può interrompere la query a meno che non si prenda cura di utilizzare una tabella derivata o CTE con solo le colonne rilevanti come origine. –