我无法让这个工作。我正在查询 S 表以获取项目列表,并希望加入 P 表以提取与 S + 前一个日期相同的日期的数据,只要可能使用了 LEAD 函数。
问题是 P 表很大,除非给出特定日期或小范围,否则需要永远查询。由于我是按日期加入标准普尔的,因此 LEAD 似乎无法提取前一个日期的数据。
还有其他选择吗?前面的 P.TDATE 通常只是之前的营业日期,但有时可能是一年多以前。
SELECT S.ID,
S.EDATE,
S.PDATE,
S.FACTOR,
S.PTYPE,
P.TDATE,
P.PRICE,
P.PTYPE,
LEAD(P.TDATE) OVER (PARTITION BY P.ID
ORDER BY P.TDATE DESC) AS PRIOR_DATE,
LEAD(P.PRICE) OVER (PARTITION BY P.ID
ORDER BY P.TDATE DESC) AS PRIOR_PRICE,
LEAD(P.PTYPE) OVER (PARTITION BY P.ID
ORDER BY P.TDATE DESC) AS PRIOR_PTYPE
FROM S
LEFT JOIN P ON P.ID = S.ID
AND P.TDATE = S.EDATE
WHERE S.PERIOD = 'D'
AND S.PTYPE IN ('A',
'G',
'Q',
'Y')
ORDER BY S.EDATE ;
我得到了所有正确的数据,除了prior_date、prior_price 和prior_ptype 在它们不应该的时候都是空白的。
日期字段中没有 NULL 值。
是否有另一种基于 S.EDATE 而不是在左连接中使用 P.TDATE = S.EDATE 查询 P 表的有效方法?我相信这种情况是由于 LEAD 函数没有其他数据可查看而导致“先前”列上没有显示任何内容的原因。
谢谢,