You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于过往日期新增两列 - PrestoSQL实现求助

PrestoSQL 实现按ID判断过往及近2个月是否出现COVID=1的解决方案

针对你的需求,不需要用GROUP BY聚合行(会丢失原表的每条记录),用窗口函数可以保留所有原始数据的同时,按ID计算两个标志列,以下是可行的SQL语句:

SELECT
    Date,
    ID,
    COVID,
    -- 该ID截至当前日期是否曾出现COVID=1
    MAX(COVID) OVER (
        PARTITION BY ID
        ORDER BY Date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS EverCOVIDBefore,
    -- 该ID在当前日期过去2个月内是否曾出现COVID=1
    MAX(COVID) OVER (
        PARTITION BY ID
        ORDER BY Date
        RANGE BETWEEN INTERVAL '2' MONTH PRECEDING AND CURRENT ROW
    ) AS COVID_last_2_mth
FROM your_table_name;

关键逻辑说明:

  • EverCOVIDBefore:按ID分组、日期排序,取该ID从第一条记录到当前行的COVID最大值。只要过往有过1,结果就是1,否则为0。
  • COVID_last_2_mth:按ID分组、日期排序,取当前日期往前推2个月范围内的COVID最大值,判断近2个月是否出现过阳性。

注意事项:

  1. 把语句中的your_table_name替换成你的实际表名。
  2. 如果Date字段是字符串格式,需要先转为日期类型,例如用CAST(Date AS DATE)替换所有Date字段。
  3. 若窗口RANGE方式报错,可改用条件判断的写法(基于当前日期往前2个月):
    MAX(CASE WHEN Date >= DATE_ADD('month', -2, CURRENT_DATE) THEN COVID ELSE 0 END) OVER (PARTITION BY ID) AS COVID_last_2_mth
    

内容的提问来源于stack exchange,提问作者Alexander Peterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:20:41