sql-server-2008 - ultimo - obtener mes y año de una fecha sql
Cómo seleccionar los datos de la última semana de la fecha de hoy (3)
Cómo seleccionar los datos de la semana (más precisamente, los datos de los últimos 7 días) de la fecha actual de la manera más rápida, ya que tengo millones o filas en la tabla. Tengo una marca de tiempo de created_date en la tabla sql.
He intentado esto
SELECT Created_Date
FROM Table_Name
WHERE Created_Date >= DATEADD(day,-7, GETDATE())
Tengo dos preguntas:
- ¿Esta consulta es correcta?
- ¿Es esta la forma más rápida de obtener los datos de los últimos siete días de una tabla que tiene millones de filas?
- La consulta es correcta
2A. En la medida en que los últimos siete días tienen muchas menos filas que una tabla completa, un índice puede ayudar
2B. Si solo está interesado en Created_Date, puede intentar usar algún grupo por y contar, debería ayudar con el tamaño del conjunto de resultados
Sí, la sintaxis es precisa y debería estar bien.
Aquí está la demostración de SQL Fiddle que creé para su caso particular
create table sample2
(
id int primary key,
created_date date,
data varchar(10)
)
insert into sample2 values (1,''2012-01-01'',''testing'');
Y aquí es cómo seleccionar los datos.
SELECT Created_Date
FROM sample2
WHERE Created_Date >= DATEADD(day,-11117, GETDATE())
Seleccionar registros de los últimos 7 días.
WHERE Created_Date >= DATEADD(day, -7, GETDATE())
para seleccionar registros para la semana actual
SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT * FROM
WHERE CreatedDate >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE()))
AND CreatedDate < DATEADD(day, 8 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE()))
Si desea seleccionar registros para la semana pasada en lugar de los últimos 7 días
SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT * FROM
WHERE CreatedDate >= DATEADD(day, -(DATEPART(dw, GETDATE()) + 6), CONVERT(DATE, GETDATE()))
AND CreatedDate < DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE()))