首页 > 解决方案 > 如何从数据库表的最后 7 天中选择数据?

问题描述

我正在尝试在 PostgreSQL 中执行一个查询,该查询能够根据数据库中表的日期字段显示过去 7 天的记录,在我的情况下,该字段是“fecha_reparto”,表有下一个结构体:

驱动器 价值 fecha_reparto
一个 10 22/03/2021
2 21/03/2021
C 5 20/03/2021
D 6 15/03/2021
7 2021 年 3 月 18 日
F 11 17/03/2021
G 2 16/03/2021
H 1 2021 年 3 月 19 日

我想得到类似的东西:

驱动器 价值 fecha_reparto
一个 10 22/03/2021
2 21/03/2021
C 5 20/03/2021
H 1 2021 年 3 月 19 日
7 2021 年 3 月 18 日
F 11 17/03/2021
G 2 16/03/2021

我尝试按如下方式使用 Max() 但出现错误:

Select drv, value, MAX(fecha_reparto) from 
reporting_services.vw_mx_log_icaro_descripcion_entregas_comercial
WHERE fecha_reparto >= fecha_reparto - interval '7 days' and drv IS NOT NULL

之后我使用了下一个查询,我没有收到错误,但我不太确定它是否给了我想要的东西:

select drv,value,MAX(fecha_reparto) as fecha_reparto,
cobertura_3c_promedio from 
reporting_services.vw_mx_log_icaro_descripcion_entregas_comercial
WHERE fecha_reparto >= fecha_reparto - interval '7 days' and drv IS NOT NULL
GROUP BY  drv, value

你们觉得怎么样?最后一个查询没问题,还是我需要别的东西?

顺便说一句,谢谢,最好的问候。

标签: sqlpostgresqlsubquery

解决方案


与表中的最近日期相比,您似乎希望 7 天的保留期发生。如果是这样,我们可以MAX()在此处用作分析函数来查找此日期,然后大致使用您的第一个查询:

WITH cte AS (
    SELECT *, MAX(fecha_reparto) OVER() AS max_fecha_reparto
    FROM reporting_services.vw_mx_log_icaro_descripcion_entregas_comercial
)

SELECT drv, value, fecha_reparto
FROM cte
WHERE fecha_reparto >= max_fecha_reparto - INTERVAL '7 days' AND drv IS NOT NULL;

推荐阅读