sql - usuario - orden correcto de las instrucciones para crear una función en línea
SQL Server: obtenga datos solo el año pasado (12)
Bueno, creo que falta algo aquí. El usuario desea obtener datos del último año y no de los últimos 365 días. Hay una gran diferencia. En mi opinión, los datos del último año son todos los datos de 2007 (si estoy en 2008 ahora). Entonces la respuesta correcta sería:
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE) - 1
Luego, si desea restringir esta consulta, puede agregar otro filtro, pero siempre buscando en el último año
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE) - 1 AND DATE > ''05/05/2007''
Estoy escribiendo una consulta en la que tengo que obtener los datos solo el año pasado. ¿Cuál es la mejor manera de hacer esto?
SELECT ... FROM ... WHERE date > ''8/27/2007 12:00:00 AM''
Buscar dateadd en BOL
dateadd(yy,-1,getdate())
DONDE fecha> DATE_SUB (AHORA (), INTERVALO 1 AÑO)
Esto le dará una consulta que extraerá 1 año de datos cada vez que lo ejecute.
Encontré esta página mientras buscaba una solución que me ayudaría a seleccionar resultados de un año calendario anterior. La mayoría de los resultados que se muestran arriba parecen devolver elementos de los últimos 365 días, lo que no funcionó para mí.
Al mismo tiempo, me dio suficiente dirección para resolver mis necesidades en el siguiente código, que publico aquí para cualquier otra persona que tenga la misma necesidad que la mía y que pueda encontrar esta página en la búsqueda de una solución.
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
Gracias a aquellos de arriba cuyas soluciones me ayudaron a llegar a lo que necesitaba.
GETDATE () devuelve la fecha y la hora actual.
Si el año pasado comienza en la medianoche del día actual del año pasado (como en el ejemplo original) debe usar algo como:
DECLARE @start datetime
SET @start = dbo.getdatewithouttime(DATEADD(year, -1, GETDATE())) -- cut time (hours, minutes, ect.) -- getdatewithouttime() function doesn''t exist in MS SQL -- you have to write one
SELECT column1, column2, ..., columnN FROM table WHERE date >= @start
Las otras sugerencias son buenas si tiene "solo SQL".
Sin embargo, sugiero que, de ser posible , calcule la fecha en su programa y la inserte como cadena en la consulta SQL.
Al menos para mesas grandes (es decir, varios millones de filas, tal vez combinadas con combinaciones) que le darán una mejora de velocidad considerable, ya que el optimizador puede funcionar con mucho mejor.
Lo más legible, IMO:
SELECT * FROM TABLE WHERE Date >
DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))
Cual:
- Obtiene ahora el datetime GETDATE () = # 8/27/2008 10:23 am #
- Convierte a una cadena con el formato 101 CONVERT (varchar, # 8/27/2008 10:23 am#, 101) = ''8/27/2007''
- Convierte a un CONVERTIDO de fecha y hora (datetime, ''8/27/2007'') = # 8/27/2008 12:00 AM#
- Resta 1 año DATEADD (aa, -1, # 8/27/2008 12:00 a.m.) = # 8/27/2007 12:00 a.m.
Hay variantes con DATEDIFF y DATEADD para darle la medianoche de hoy, pero tienden a ser bastante obtusas (aunque un poco mejor en cuanto al rendimiento, no es que lo note en comparación con las lecturas requeridas para recuperar los datos).
Lo siguiente agrega -1 año a la fecha actual:
SELECT ... From ... WHERE date > DATEADD(year,-1,GETDATE())
Tuve un problema similar, pero el codificador anterior solo proporcionó la fecha en formato mm-aaaa. Mi solución es simple, pero podría ser útil para algunos (también quería asegurarme de que se eliminaran los espacios iniciales y finales):
SELECT ... FROM ....WHERE
CONVERT(datetime,REPLACE(LEFT(LTRIM([MoYr]),2),''-
'','''')+''/01/''+RIGHT(RTRIM([MoYr]),4)) >= DATEADD(year,-1,GETDATE())
Yo, como @DE White, vine aquí por razones similares pero diferentes a la pregunta original. La pregunta original pregunta por los últimos 365 días. La respuesta de @ samjudson lo proporciona. La respuesta de @DE White arroja resultados para el año calendario anterior.
Mi consulta es un poco diferente ya que funciona para el año anterior hasta la fecha actual e inclusive la fecha actual:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Por ejemplo, el 17 de febrero de 2017, esta consulta devuelve los resultados del 1/1/2016 al 2/17/2017
argumento para la función DATEADD:
DATEADD (*datepart* , *number* , *date* )
datepart puede ser: aa, qq, mm, dy, dd, sem, dw, hh, mi, ss, ms
número es una expresión que se puede resolver en un int que se agrega a una fecha de fecha
La fecha es una expresión que se puede resolver a un valor de hora, fecha, hora pequeña, fecha, hora2 o fecha de salida.
declare @iMonth int
declare @sYear varchar(4)
declare @sMonth varchar(2)
set @iMonth = 0
while @iMonth > -12
begin
set @sYear = year(DATEADD(month,@iMonth,GETDATE()))
set @sMonth = right(''0''+cast(month(DATEADD(month,@iMonth,GETDATE())) as varchar(2)),2)
select @sYear + @sMonth
set @iMonth = @iMonth - 1
end