【发布时间】:2018-05-05 11:03:34
【问题描述】:
简单地说,我有一个看起来像...的表。
ID | Start_Date
1234 | 9/1/2017
表 b 的付款日期和金额与表 a 中的 ID 对应。表 b 看起来像..
ID | Recd_Date | Tran_Code | Total_Recd
1234 | 10/2/2017 | 173 | $100
1234 | 11/1/2017 | 173 | $200
我正在尝试使用 Qualify 函数来显示在表 a 的 Start_Date 之后发生的表 b 中的第一个 recd_date 和数量。到目前为止,我有以下代码。该代码有效,但由于某种原因,它显示了 2017 年 11 月 1 日。
SELECT
a.ID,
a.Start_Date,
b.Recd_Dt,
b.Total_Recd,
b.Tran_ID
FROM
(SELECT ID, START_DATE FROM tbl) a
LEFT JOIN
(SELECT ID, Recd_Dt, tran_ID, Total_Recd
FROM tbl b
WHERE Tran_ID = '173' AND Total_Recd > 0
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Recd_Dt)=1
)b
ON a.ID = b.ID AND b.Recd_Dt >= a.Start_Date
Where a.ID = '1234'
代码运行,但由于某种原因,我显示 b 表列的空值。如果我将 Qualify 行更改为..
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Recd_Dt ASC)=1
我仍然得到一个空值,如果我将其更改为 DESC 订单,我会得到 11/1/2017 条目。
我需要做什么才能获得 10/2/2017 线路?
【问题讨论】:
-
您使用的是
LEFT JOIN,您确定在b中获得NULLs 的情况有任何 个匹配记录吗? (请注意,连接谓词b.Recd_Dt >= a.Start_Date在 ROW_NUMBER() 限定条件之后应用...) -
您能否详细说明两个表中的行数和每个 ID 的行数?并回答您上一篇文章中的问题:是否可以在表 a 中为相同的 ID 添加其他行?如果是,如何处理?