2011-08-16 22 views
7

Tengo un requisito como tener que extraer todos los registros en el rango de fechas seleccionado por el usuario, seleccionando todos los empleados que comenzaron del 15-ene-2011 al 20-ago-2011 y grupo por fecha.¿Podemos usar el agrupamiento por y en qué condición con el mismo nombre de campo

¿Cómo debo escribir consulta SQL para esto:

SELECT * 
    FROM employees 
    WHERE startdate >= '15-jan-2011' 
    AND startdate <= '20-aug-2011' 
GROUP BY startdate 
+3

Su requisito no tiene sentido como está escrito. Si tiene dos empleados que comenzaron el 15 de enero, ¿qué es exactamente lo que quiere que se devuelva? ¿Puede mostrar algunos datos de muestra y los resultados deseados, incluidos los casos en los que se contrataron varios empleados el mismo día? Además, si dos empleados tienen diferentes salarios o nombres, ¿qué es lo que quiere que se devuelva? ¿Tal vez malinterpretas qué hace 'GROUP BY'? –

Respuesta

9

Absolutamente. Conseguirá filtrar los registros en su rango de fechas y luego agruparlos para cada día donde haya datos.

Cabe señalar que solo podrá seleccionar la fecha de inicio y los agregados que esté calculando. De lo contrario, debería funcionar perfectamente bien.

Por ejemplo, esta consulta le dará un recuento de los empleados para cada Fecha de inicio:

SELECT startdate, count(*) 
FROM employees 
WHERE startdate >= '15-jan-2011' 
     AND startdate <= '20-aug-2011' 
GROUP BY startdate 
1

Usted puede, pero el "GROUP BY" cláusula se utiliza para agrupar conjuntos de filas, por lo que no hace tiene sentido para su pregunta (o cualquier cosa que implique un "SELECCIONAR *").

Para responder a su pregunta, sin embargo:

SELECT DATEADD(dd, 0, DATEDIFF(dd,0,StartDate)) AS 'StartDate', <other fields> 
FROM Employees 
WHERE StartDate BETWEEN '15-Jan-2011' AND '20-Jan-2011' 
ORDER BY StartDate 

Nota: el despojo del tiempo desde la fecha venía de here

Cuestiones relacionadas