2017-11-28 10 views
0

Terdata SQL AssistantをエンタープライズDWに接続しています。私は以下の質問を書いて、特定の時点における未処理品の在庫を表示しています。参照されたテーブルは、ロード日時によって状態が変更されたとき(および履歴レコードは削除されないとき)に新しいレコードをロードして格納します。私のクエリの出力は、指定された日付の1行です。ストアド・プロシージャまたは再帰的な問合せを作成して、これらのサマリー行の履歴を作成することはできますか(1日に1つの新しい行があります)。私は過去にこのような機能を使用していませんでした。該当する場合は、以前に回答した質問へのリンクや、他の可能な解決方法を調べるためにどのように正しい軌道に乗ることができるかについての提案は、まったく問題ありません。私の知識でこのギャップを埋めようとしているだけです。ここでTeradataのストアドプロシージャを使用して要約履歴テーブルを作成する

SELECT 
'2017-10-02' as Dt 
,COUNT(DISTINCT A.RECORD_NBR) as Pending_Records 
,SUM(A.PAY_AMT) AS Total_Pending_Payments 
FROM DB.RECORD_HISTORY A 

INNER JOIN 
(SELECT MAX(LOAD_DT) AS LOAD_DT 
,RECORD_NBR 
FROM DB.RECORD_HISTORY 
WHERE LOAD_DT <= '2017-10-02' 
GROUP BY RECORD_NBR 
) B 

ON A.RECORD_NBR = B.RECORD_NBR 
AND A.LOAD_DT = B.LOAD_DT 
WHERE 
A.RECORD_ORDER =1 AND Final_DT Is Null 
GROUP BY Dt 
ORDER BY 1 desc 

答えて

0

は、クエリの私の解釈です:

record_order#1のために(2017年10月2日までアップ)最新load_dtについて、 リターン

1)数保留中の異なるレコードの合計
2)未払いの支払い総額

これはですか?正しい?あなたはそれぞれの「Load_Dt」のために、この情報が、1行を探しているなら、あなただけのINNER JOINをすることを削除する必要があります。

SELECT 
    load_Dt, 
    COUNT(DISTINCT record_nbr) AS Pending_Records, 
    SUM(pay_amt) AS Total_Pending_Payments 
FROM DB.record_history 
WHERE record_order = 1 
AND final_Dt IS NULL 
GROUP BY load_Dt 
ORDER BY 1 DESC 

あなたはrecord_orderあたりの要約情報を取得したい場合は、同じようにrecord_order追加しますグループ化列:

SELECT 
    load_Dt, 
    record_order, 
    COUNT(DISTINCT record_nbr) AS Pending_Records, 
    SUM(pay_amt) AS Total_Pending_Payments 
FROM DB.record_history 
WHERE final_Dt IS NULL 
GROUP BY load_Dt, record_order 
ORDER BY 1,2 DESC 

あなたは(暦日がノー対応する「load_dt」の日である場合)、日ごとに1行を取得したい場合は、sys_calendar.calendarビューから選択することができますし、LEFTは、上記のクエリを登録しよう「load_dt」フィールド:

SELECT cal.calendar_date, src.Pending_Records, src.Total_Pending_Payments 
FROM sys_calendar.calendar cal 
LEFT JOIN (
    SELECT 
     load_Dt, 
     COUNT(DISTINCT record_nbr) AS Pending_Records, 
     SUM(pay_amt) AS Total_Pending_Payments 
    FROM DB.record_history 
    WHERE record_order = 1 
    AND final_Dt IS NULL 
    GROUP BY load_Dt 
) src ON cal.calendar_date = src.load_Dt 
WHERE cal.calendar_date BETWEEN <start_date> AND <end_date> 
ORDER BY 1 DESC 

TDシステムにアクセスできないため、構文エラーが発生する可能性があります。それが機能しているのか、それとも他のものを探しているのかを教えてください。

+0

ありがとうございます。あなたの最終的な提案は、複雑さ(つまりストアドプロシージャ)を必要とせずに必要な出力を得ることができます – YoSoySeanFoy

+0

No prob bob :)。 – ravioli

関連する問題