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

如何用SAS Proc SQL查询SQL Server表中各案例的最新记录

用SAS Proc SQL从SQL Server提取每个案例的最新记录

这里有两种无需创建临时表的可行方案,适配无写入权限的场景:

方案1:窗口函数ROW_NUMBER()(推荐)

这是最高效简洁的方式,SQL Server原生支持窗口函数,Proc SQL可以直接通过ODBC调用该逻辑:

proc sql;
  connect to odbc (dsn='你的SQL Server数据源名称');
  select * from connection to odbc (
    SELECT t.*
    FROM (
      SELECT 
        *,
        -- 按案例字段分组,每组内按最后更新日期倒序编号
        ROW_NUMBER() OVER (PARTITION BY 案例标识字段 ORDER BY 最后更新日期 DESC) AS row_num
      FROM 你的事务数据表名
    ) t
    -- 只取每组的第一条(最新记录)
    WHERE t.row_num = 1
  );
  disconnect from odbc;
quit;
  • 把案例标识字段替换成你实际用来区分不同案例的字段(比如case_id)
  • 如果同一个案例在同一时间有多条记录,可在ORDER BY后加额外字段(比如主键)确保唯一取一条:ORDER BY 最后更新日期 DESC, 主键字段 DESC

方案2:关联子查询(兼容旧环境)

如果环境不支持窗口函数,用子查询先获取每个案例的最新日期,再关联原表匹配记录:

proc sql;
  connect to odbc (dsn='你的SQL Server数据源名称');
  select * from connection to odbc (
    SELECT t1.*
    FROM 你的事务数据表名 t1
    INNER JOIN (
      -- 先分组得到每个案例的最大更新日期
      SELECT 案例标识字段, MAX(最后更新日期) AS latest_date
      FROM 你的事务数据表名
      GROUP BY 案例标识字段
    ) t2 
    ON t1.案例标识字段 = t2.案例标识字段 AND t1.最后更新日期 = t2.latest_date
  );
  disconnect from odbc;
quit;

注意:如果同一案例同一日期有多条记录,这个方案会返回所有符合的记录,可根据需求调整。

为什么你之前的方法没用?

直接用MAX(最后更新日期)搭配HAVING的问题在于:HAVING是对分组后的聚合结果过滤,无法关联回原表的其他字段,所以只能拿到日期值,拿不到对应案例的完整记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:17