sql - segundo - ¿Cómo se encuentran los resultados que ocurrieron la semana pasada?
sum sql (3)
Tengo una tabla de books
con una columna de fecha de returned_date
. Me gustaría ver los resultados de todos los libros con una fecha devuelta que ocurrió la semana pasada.
¿Alguna idea? Intenté hacer algunas matemáticas de fecha, pero Postgres no estaba contento con mi intento.
¿Qué matemáticas probaste?
Esto debería funcionar
select * from books where current_date - integer ''7''
Desea usar interval
y current_date
:
select * from books where returned_date > current_date - interval ''7 days''
Esto devolvería los datos de la semana pasada, incluido el día de hoy.
Aquí hay más sobre cómo trabajar con las fechas en Postgres.
Más simple y correcto:
SELECT * FROM books WHERE returned_date > now()::date - 7
now()::date
es la implementación de Postgres del SQLCURRENT_DATE
estándar . Ambos hacen exactamente lo mismo en PostgreSQL. Solo demostrando.now()::date - 7
funciona porque se pueden restar / agregar valoresinteger
(= días) de / a unadate
. Un número sin comillas como7
es un literal numérico predeterminado ainteger
mientras que solo contiene dígitos y un signo inicial opcional, por lo que no es necesario un lanzamiento explícito.También puede operar con un
interval
, pero esto es más simple y más rápido para ladate
. Con latimestamp
tipo de datos , debe sumar / restar uninterval
, como lo demuestra @Eric.El cálculo es independiente del tipo de datos real de
returned_date
, el tipo resultante a la derecha del operador se forzará para que coincida de cualquier manera (y se generará un error si no se registra el reparto).Para la " semana pasada ":
Para incluir hoy> current_date - 7
o>= current_date - 6
.
Para excluir hoy ,BETWEEN current_date - 7 AND current_date - 1
(o similar).>= current_date - 7
ya que otras respuestas sugieren filas de devoluciones durante los últimos 8 días en lugar de 7 y es erróneo, estrictamente hablando.