Estoy escribiendo una consulta en la que tengo que obtener los datos solo del último año. ¿Cuál es la mejor manera de hacer esto?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
fuente
fuente
Encontré esta página mientras buscaba una solución que me ayudara a seleccionar los resultados de un año calendario anterior. La mayoría de los resultados que se muestran arriba parecen devolver artículos 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 estoy publicando aquí para cualquier otra persona que tenga la misma necesidad que la mía y que pueda encontrar esta página en busca de una solución.
Gracias a aquellos arriba cuyas soluciones me ayudaron a llegar a lo que necesitaba.
fuente
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 año pasado son todos los datos de 2007 (si estoy en 2008 ahora). Entonces la respuesta correcta sería:
Luego, si desea restringir esta consulta, puede agregar algún otro filtro, pero siempre buscando en el último año.
fuente
Buscar fechaadd en BOL
fuente
El más legible, en mi opinión:
Cual:
Hay variantes con DATEDIFF y DATEADD para obtener la medianoche de hoy, pero tienden a ser bastante obtusas (aunque un poco mejor en el rendimiento, no es que lo notaría en comparación con las lecturas necesarias para obtener los datos).
fuente
GETDATE () devuelve la fecha y hora actuales .
Si el año pasado comienza a la medianoche del día actual del año pasado (como en el ejemplo original), debe usar algo como:
fuente
Las otras sugerencias son buenas si tiene "solo SQL".
Sin embargo, sugiero que, si es posible , calcule la fecha en su programa y la inserte como una cadena en la consulta SQL.
Al menos para tablas grandes (es decir, varios millones de filas, tal vez combinadas con uniones) que le brindarán una mejora considerable en la velocidad, ya que el optimizador puede trabajar con eso mucho mejor.
fuente
argumento para la función DATEADD:
datepart puede ser: aa, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
número es una expresión que se puede resolver en un int que se agrega a una parte de fecha
fecha es una expresión que se puede resolver en un valor de hora, fecha, fecha y hora pequeña, fecha y hora, fecha y hora2 o fecha y hora.
fuente
fuente
Yo, como @DE White, vine aquí por razones similares pero diferentes a la pregunta original. La pregunta original se refiere a los últimos 365 días. La respuesta de @ samjudson proporciona eso. La respuesta de @DE White devuelve 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 inclusive:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Por ejemplo, el 17 de febrero de 2017, esta consulta devuelve resultados del 1/1/2016 al 17/02/2017.
fuente
Tuve un problema similar, pero el codificador anterior solo proporcionó la fecha en formato mm-aaaa. Mi solución es simple pero podría resultar útil para algunos (también quería asegurarme de que se eliminaran los espacios de inicio y finalización):
fuente
Por alguna razón, ninguno de los resultados anteriores funcionó para mí.
Esto selecciona los últimos 365 días.
fuente