soporta segundo por optimizar lentas inner cuantas consultas sql postgresql date-arithmetic

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.



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 SQL CURRENT_DATE estándar . Ambos hacen exactamente lo mismo en PostgreSQL. Solo demostrando.

  • now()::date - 7 funciona porque se pueden restar / agregar valores integer (= días) de / a una date . Un número sin comillas como 7 es un literal numérico predeterminado a integer 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 la date . Con la timestamp tipo de datos , debe sumar / restar un interval , 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.