【问题标题】:Returning most recent record with an outer join使用外部连接返回最近的记录
【发布时间】:2014-12-06 00:41:03
【问题描述】:

我有一个返回以下数据的查询:

F_id - P_id - Date
----------------------
1001 - 0121 - 01/01/14
NULL - 0122 - NULL
1002 - 0123 - 01/06/14
1003 - 0123 - 01/04/14
NULL - 0124 - NULL
1004 - 0125 - 01/04/14
1005 - 0125 - 02/04/14
1006 - 0125 - 07/07/14

F_id 是表单 ID,P_id 是从另一个表外部连接的人员标识符,Date 是输入表单的日期。 并非所有人都输入了表格,有些人有一个,有些人有几个。 我要做的是为列表中的每个人带回最近的 F_id 和 Date,但如果他们没有输入表格,则将其保留为 NULL。 像这样:

F_id - P_id - Date
--------------------------
1001 - 0121 - 01/01/14
NULL - 0122 - NULL
1003 - 0123 - 01/04/14
NULL - 0124 - NULL
1006 - 0125 - 07/07/14

我尝试过以多种方式使用 MAX(F_id),但都没有成功。 有人有什么建议吗?

提前致谢!

【问题讨论】:

  • 您需要告诉我们您使用的平台——oracle 或 ms 服务器。

标签: tsql


【解决方案1】:

如果您当前的 sql 是,这可能会起作用

 select blah from blah

改成

select * from
(
  select blah,
      row_number() over (partition by p_id order by F_id desc) as rn
  from blah
) t
where t.rn = 1

你可能需要

     row_number() over (partition by p_id order by coalesce(F_id,0) desc) as rn

我不确定——看看结果是否不同。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    相关资源
    最近更新 更多