首页 > 解决方案 > ID、日期和最近 x 天的最大值

问题描述

假设我有一张桌子:

 ---------------
 id |  date | value
------------------
  1 |  Jan 1 | 10
  1 |  Jan 2 | 12
  1 |  Jan 3 | 11
  2 |  Jan 4 | 11

我需要获取过去 90 天内每个 id、每个日期、每个日期的最大值和中值。我使用查询:

select id, date, value
max(value) over (partition by id, date) as max_date,
median(value) over (partition by id, date) as med_date
from table
where date > date - interval '90 days'

我尝试导出数据并手动检查,但结果不正确。我错过了什么?谢谢

预期输出是自最近 90 天以来的最大值。例如日期是 4 月 5 日,那么它将找到从 1 月 5 日(过去 90 天)到 4 月 5 日的最大值。然后日期移动到 4 月 6 日,然后它将在 1 月 6 日到 4 月 6 日再次执行,依此类推每个 ID

标签: sqlpostgresqlmax

解决方案


所以我假设你可以获得相同 ID 和日期的多个值,对吗?否则对 id 和 date 进行分区是没有意义的

SELECT id, date, max(value), avg(value) from table where date > date - interval '90 days'
group by id, value

'group by' 进行分区


推荐阅读