2012-02-15 8 views
5

que tiene un procedimiento que volver informe diario entre un ejemplo de tiempo (CreateDate ENTRE '21/01/2012' Y '02/19/2012')fin de auto en un selecto

Quiero este resultado

1/21 
1/22 
1/23 
. 
2/1 
. 
. 

embargo, la salida se clasifica automáticamente en función del día !! la siguiente manera:

2/1 
2/2 
. 
2/15 
1/21 
1/22 
1/23 
. 
. 

I Cant usando el orden de (CreateDate) porque tengo este selecto:

SELECT  COUNT(UserId) AS c, DAY(CreateDate) AS d 
FROM  dbo.aspnet_Membership 
WHERE  (CreateDate BETWEEN '2012/1/21' AND '2012/2/19') 
GROUP BY DAY(CreateDate) 
+0

Si la primera columna (antes de que el /) es el mes, que * no * tiene que la producción de esa consulta. – gbn

Respuesta

8

Si desea ordenar por mes y por día, necesita mes por supuesto.

Y usted siempre necesita un PEDIDO POR para garantizar el orden de los resultados.

SELECT  COUNT(UserId) AS c, MONTH(CreateDate) AS m, DAY(CreateDate) AS d 
FROM  dbo.aspnet_Membership 
WHERE  (CreateDate BETWEEN '2012/1/21' AND '2012/2/19') 
GROUP BY MONTH(CreateDate) AS m, DAY(CreateDate) AS d 
ORDER BY MONTH(CreateDate) AS m, DAY(CreateDate) AS d 

En este caso, el orden que se obtuvo fue una coincidencia debido a la GROUP BY (lo que implica un ORDER BY en MySQL, pero no otros RDBMS)

+2

+1 para "siempre necesita un pedido por" –

1

Si significaba que quiere pedir a día ,

esto podría funcionar para usted

SELECT COUNT(UserId) AS c, DAY(CreateDate) AS d 
    FROM dbo.aspnet_Membership 
WHERE (CreateDate BETWEEN '2012/1/1' AND '2012/2/29') 
    GROUP BY DAY(CreateDate) 
ORDER By d ASC 
+0

CreateDate BETWEEN '2012/1/21' Y '2012/2/19' es importante. –