2011-07-13 9 views
0
WITH abc AS 
(  
    SELECT p_id  
     , t1.amount as amount 
     , SUM(amount) OVER (PARTITION BY '|| pqr_rec.p_type ||') AS sum_amount 
    FROM table1 t1, temp_table tt1t 
    WHERE t1.activity_type = 'pqr_rec.p_activity_type' 
)  
SELECT p_id 
    , sum_amount 
    , amount 
FROM abc 
WHERE sum_amount > '||pqr_rec.p_amount 

T2表:パーティションは日付持つタイムスタンプで作業されていない

xyz_id    p_type   p_amount    p_activity_type 
============================================================================ 
p_1     p_id,date    100000    sell 

T1表:

今ここにテーブルT2の第一レコードがカーソルPQRによってフェッチされている
T_id   p_id amount date     p_activity_type 
===================================================================== 
1    E1  100  1984-10-27 00:02:00  sell 
2    E1  200  1984-10-27 00:04:00  sell 
3    E1  200  1984-10-27 00:05:00  sell 
4    E1  300  1984-10-27 00:06:00  sell 
5    E1  100  1984-10-27 00:07:00  sell 

と上記のクエリが実行されるので、パーティションはp_idとdateに基づいて行われますが、問題は日付にタイムスタンプが含まれているため、グループが動作していません。タイムスタンプ。

このシチュエーションをどのように処理できますか? 私はオラクルを使用しています

答えて

2

あなたが切り捨てられた日付を持つビューを作成することができます。

create view t1_trunc_date as 
select p_id, trunc(date) as date, ... 
from table1; 

次にメイン・クエリに代わりT1のことを使用しています。

またはインラインビューご希望の場合:

WITH abc AS 
(  
    SELECT p_id  
     , t1.amount as amount 
     , SUM(amount) OVER (PARTITION BY '|| pqr_rec.p_type ||') AS sum_amount 
    FROM (select p_id, trunc(date) as date, ... 
      from table1) t1 
     , temp_table tt1t 
    WHERE t1.activity_type = 'pqr_rec.p_activity_type' 
) 
... 
+0

:ビューを使用する以外のオプションはありますか? – gaurav

+0

インライン表示ですか?更新された回答をご覧ください。 –

1

Oracleのすべての日付には時間コンポーネントがあります。 truncを使用すると、日によって分割することができます:

PARTITION BY trunc(your_date) 
+0

ない可能性を私はテーブルt2から来てどの列を知らない、と私たちは、P1、TRUNC(日付)としてP_TYPEを使用しません。 – gaurav

関連する問題