2012-01-09 16 views
6

Estoy usando SQL Server 2008.¿Cómo consultar para obtener totales de los últimos siete días?

Quiero escribir una consulta que me da actividad total durante varios días. Específicamente, quiero contar el total de votos por día durante los últimos siete días.

Mi mesa se ve así:

VoteID --- VoteDate -------------- Vote --- BikeID 

1   2012-01-01 08:24:25  1  1234 
2   2012-01-01 08:24:25  0  5678 
3   2012-01-02 08:24:25  1  1289 
4   2012-01-03 08:24:25  0  1234 
5   2012-01-04 08:24:25  1  5645 
6   2012-01-05 08:24:25  0  1213 
7   2012-01-06 08:24:25  1  1234 
8   2012-01-07 08:24:25  0  1125 

necesito mis resultados a tener este aspecto

VoteDate ---- Total 
2012-01-01 5 
2012-01-02 6 
2012-01-03 7 
2012-01-04 1 
2012-01-05 3 

Mi pensamiento es que tengo que hacer algo como esto:

SELECT SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total 
FROM  Votes 
GROUP BY VoteDate 

Esta consulta no funciona porque cuenta solo los votos que ocurrieron (casi exactamente) al mismo tiempo. Por supuesto, quiero ver solo un día específico. ¿Cómo hago que esto suceda?

Respuesta

10

moldeada como un date:

SELECT  
    cast(VoteDate as date) as VoteDate, 
    SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total 
FROM  Votes 
WHERE VoteDate between dateadd(day, -7, GETDATE()) and GETDATE() 
GROUP BY cast(VoteDate as date) 

Su columna VoteDate es una datetime, pero lo que desea es la parte date de ella. La forma más fácil de hacer eso es emitirlo como un tipo date. Puede leer más sobre los tipos de fecha de SQL Server here.

Y si su columna Vote es 1 o 0, puede hacer sum(vote) as Total en lugar de hacer la instrucción case.

+2

Para añadir a la respuesta de Eric, es posible que también desee agregar una cláusula WHERE para recuperar primeros datos por sólo el pasado 7 (o N) días. De lo contrario, realizaría la operación AGRUPACIÓN en el conjunto completo (que podría ser muy grande) y luego obtendría solo los últimos 7 (o N) días de datos agregados. –

+0

@WebUser - ¡Tiene razón! Agregado :) – Eric

+0

Además, puede sugerir a OP que cambie 'CASE WHEN Vote = 1 THEN 1 ELSE 0 END'by' Vote' o por 'coalesce (vote, 0)' – danihp

3
SELECT SUM(Vote) As Total, YEAR(VoteDate),Month(VoteDate),Day(VoteDate) 
FROM Votes 
Group By YEAR(VoteDate),Month(VoteDate),Day(VoteDate) 

Some SQL Server functions que pueda ser de interés

Some MySQL functions que pueda ser de interés

Cuestiones relacionadas