0
テーブル_A
-------------------
援助          
-------------------
1     

テーブル_B
-------------------
B_id | 援助
-------------------
1 1
2 1
3 1

テーブル_C
------------------------------
B_id | 処理日
------------------------------
1 20130101 12:20:01
2 20130101 12:10:01
3 20130101 13:00:01

タイミング ウィンドウに基づいての参照を使用してprocess_dateから最大値を取得する方法。タイミングウィンドウで取得したい場合は、idを1として、process_dateを次のように返す必要がありますTable_CTable_A.A_idTable_CTable_C.b_idmax(process_date)20130101 12:09:0012:21:0012:20:01

以下のクエリは私が使用しています:

select b_id, 
       process_date
  from (select c1.b_id,
               c1.process_date,
               row_number() over(partition by a.a_id 
                                 order by c1.process_date desc) rn
          from table_a a
               inner join 
               table_b b
                 on a.a_id = b.a_id
               inner join 
               table_c c1
                 on b.b_id = c1.b_id
       ) 
 where rn = 1;
4

1 に答える 1

0

従うと、処理日が設定された日付範囲内にある特定の a_id の最大処理日と対応する b_id が必要になります。これは、分析関数や行番号を必要としないソリューションです。サンプルテーブルを複製するためだけに with 句とデュアルを使用しています。table_a、table_b、table_c がある場合は削除できます。

with table_a as 
(
 select 1 a_id from dual
),
table_b as 
(
 select 1 b_id, 1 a_id from dual union all
 select 2 b_id, 1 a_id from dual union all
 select 3 b_id, 1 a_id from dual
), table_c as
(
 select 1 b_id, to_date('20130101 12:20:01', 'yyyymmdd hh24:mi:ss') process_date from dual union all
 select 2 b_id, to_date('20130101 12:10:01', 'yyyymmdd hh24:mi:ss') process_date from dual union all
 select 3 b_id, to_date('20130101 13:00:01', 'yyyymmdd hh24:mi:ss') process_date from dual
) 
select table_c.b_id, 
       table_c.process_date
  from table_b,
       table_c
 where table_b.b_id = table_c.b_id
   and table_b.a_id = 1
   and table_c.process_date = (select max(process_date)
                                 from table_b b2,
                                      table_c c2
                                where table_b.a_id = b2.a_id
                                  and b2.b_id = c2.b_id
                                  and c2.process_date between to_date('20130101 12:09:00', 'yyyymmdd hh24:mi:ss')  and 
                                                              to_date('20130101 12:21:00', 'yyyymmdd hh24:mi:ss')
                              )

戻り値:

----------------------------
b_id  |  process_date
----------------------------
1       1/1/2013 12:20:01
于 2013-03-06T23:51:30.283 に答える