【问题标题】:SQL Joining One Table to a Selection of Rows from Second Table that Contains a Max Value per GroupSQL将一个表连接到第二个表中包含每组最大值的行的选择
【发布时间】:2020-12-16 14:09:13
【问题描述】:

我有一个包含以下信息的案例表 -

ID CaseName Date Occupation
11 John 2020-01-01 Joiner
12 Mark 2019-10-10 Mechanic

还有如下财务信息表 -

ID CaseID Date Value
1 11 2020-01-01 1,000
2 11 2020-02-03 2,000
3 12 2019-10-10 3,000
4 12 2019-12-25 4,000

我需要生成一个案例列表,其中包括最近财务价值的详细信息,例如 -

ID CaseName Occupation Lastest Value
11 John Joiner 2,000
12 Mark Mechanic 4,000

现在我可以很容易地加入我的表了 -

SELECT *
FROM Cases AS c
LEFT JOIN Financial AS f ON f.CaseID = c.ID

我可以从财务表中找到每个案例的最近日期 -

SELECT CaseID, MAX(Date) AS LastDate
FROM Financial 
GROUP BY CaseID

但我正在努力寻找一种方法将这两者结合起来,以根据上面的表格产生所需的结果。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server


【解决方案1】:

一个简单的方法是窗口函数:

SELECT *
FROM Cases c LEFT JOIN
     (SELECT f.*, MAX(date) OVER (PARTITION BY CaseId) as max_date
      FROM Financial f
     ) f
     ON f.CaseID = c.ID AND f.max_date = f.date;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多