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

如何查询每年中指定数值范围首次出现的最早日期

解决方案

要获取每年中VALUE处于-100到100之间的最早RECDATE,你可以使用窗口分区函数实现按年份分组处理的需求,这正是你提到的分区查询方式。

核心查询语句

SELECT YEAR, RECDATE, VALUE
FROM (
    SELECT 
        YEAR,
        RECDATE,
        VALUE,
        -- 按年份分区,每个分区内按日期升序排序生成行号
        ROW_NUMBER() OVER (PARTITION BY YEAR ORDER BY RECDATE ASC) AS row_num
    FROM your_table_name  -- 替换为你的实际表名
    WHERE VALUE BETWEEN -100 AND 100
) ranked_data
WHERE row_num = 1  -- 筛选每个年份的第一条(最早日期)记录
ORDER BY YEAR;

语句说明

  1. 数据过滤:内层查询先通过WHERE VALUE BETWEEN -100 AND 100筛选出符合数值范围的记录。
  2. 分区排序:ROW_NUMBER() OVER (PARTITION BY YEAR ORDER BY RECDATE ASC)将数据按YEAR拆分为独立分区,每个分区内按RECDATE从小到大排序,为每条记录生成唯一行号——每个年份中最早的日期会被标记为row_num = 1。
  3. 结果筛选:外层查询仅保留row_num = 1的记录,即每个年份符合条件的最早日期数据。

扩展:处理同一年份多记录的情况

如果同一年份的同一天存在多条符合条件的记录,你可以用RANK()替代ROW_NUMBER(),这样会保留所有同一天的匹配记录:

SELECT YEAR, RECDATE, VALUE
FROM (
    SELECT 
        YEAR,
        RECDATE,
        VALUE,
        RANK() OVER (PARTITION BY YEAR ORDER BY RECDATE ASC) AS rank_num
    FROM your_table_name
    WHERE VALUE BETWEEN -100 AND 100
) ranked_data
WHERE rank_num = 1
ORDER BY YEAR;

内容的提问来源于stack exchange,提问作者James Schrumpf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:16:03