これを機能させるのに問題があります。S テーブルにクエリを実行してアイテムのリストを取得し、P テーブルに結合して、LEAD 関数を使用している可能性がある場合はいつでも、S と同じ日付 + 前の日付のデータを取得したいと考えています。
問題は、P テーブルが巨大で、特定の日付または小さな範囲が指定されない限り、クエリに永遠に時間がかかることです。私は日付で S & P に参加しているので、LEAD は前の日付のデータを引き出すことに取り組んでいないようです。
別のオプションはありますか?前の P.TDATE は多くの場合、前の営業日ですが、1 年以上前の場合もあります。
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 値はありません。
左結合で P.TDATE = S.EDATE を使用するのではなく、S.EDATE に基づいて P テーブルをクエリする別の効率的な方法はありますか? LEAD 関数には他に調べるデータがないため、この状態が「前の」列に何も表示されない原因であると思います。
ありがとう、