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

借助IFELSE扩展/修改查询以获取更多条目(附数据集示例)

提取指定Account的最新有效记录解决方案

针对你需要提取指定account下,满足reason_type = 1且effective_date不为空的最新date记录的需求,我结合你提供的数据集示例,整理了两种常用的SQL实现方案:

数据集示例

accountdateeffective_datevaluereason_type
1234564/20/20175/1/201751
1234561/20/20172/1/2017101
987654............

方案一:使用窗口函数(推荐)

这种方式逻辑清晰,代码简洁,大多数现代数据库(比如PostgreSQL、MySQL 8.0+、SQL Server等)都支持:

WITH ranked_records AS (
    SELECT 
        account,
        date,
        effective_date,
        value,
        reason_type,
        -- 按account分组,每组内按date降序排名,最新日期排第1
        ROW_NUMBER() OVER (PARTITION BY account ORDER BY date DESC) AS record_rank
    FROM your_table_name
    WHERE reason_type = 1 
        AND effective_date IS NOT NULL
)
SELECT 
    account,
    date,
    effective_date,
    value,
    reason_type
FROM ranked_records
WHERE record_rank = 1;

逻辑说明

  1. 先通过CTE(公共表表达式)筛选出所有符合reason_type = 1且effective_date不为空的记录,同时给每条记录按account分组、date降序排名
  2. 最后只取排名为1的记录,也就是每个account下最新的符合条件的那条

方案二:使用子查询(兼容旧版本数据库)

如果你的数据库不支持CTE或窗口函数,可以用这种关联子查询的方式:

SELECT t.*
FROM your_table_name t
INNER JOIN (
    -- 先找出每个符合条件的account的最新date
    SELECT account, MAX(date) AS latest_date
    FROM your_table_name
    WHERE reason_type = 1 
        AND effective_date IS NOT NULL
    GROUP BY account
) latest_dates 
    ON t.account = latest_dates.account 
    AND t.date = latest_dates.latest_date
-- 再次过滤条件,确保拿到的记录符合要求
WHERE t.reason_type = 1 
    AND t.effective_date IS NOT NULL;

逻辑说明

  1. 子查询先分组统计每个account下符合条件的最大date(即最新日期)
  2. 将原表与子查询结果关联,匹配account和date,从而拿到对应最新日期的完整记录
  3. 最后再次过滤条件,避免出现同account同date但不符合要求的记录(如果你的数据不会出现这种情况,这一步可以省略)

内容的提问来源于stack exchange,提问作者Dan Manion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:01