sql >> データベース >  >> RDS >> Oracle

消費された送信トランザクションに基づいて最初のトランザクションIDを取得するOracleクエリ

    select id, part_no, sq2-oq2 rest
      from (
        select tr.*, row_number() over (partition by part_no order by id) rnk
          from (select i.transaction_equipmentid id, part_no, i.quantity iq, 
                       sum(i.quantity) over (partition by part_no 
                                                 order by i.transaction_equipmentid) sq1,
                       sum(i.quantity) over (partition by part_no) sq2,
                       o.quantity oq1,
                       max(o.quantity) over (partition by part_no) oq2
                       from wa_ii_tbl_tr_equipment  i 
                  left join wa_ii_tbl_tr_out_equipment o 
                    on o.transaction_equipmentid_fk = i.transaction_equipmentid
                  where i.supplierid_fk = 62551 ) tr
          where sq1 >= oq2 or oq2 is null )
      where rnk = 1 
    

    入力と出力を結合してから、分析関数sum()を使用します およびmax() 私は必要なすべての情報を準備します、最も重要なのは累積合計です。最も内側のクエリを個別に実行していることがわかります。これはtrの別名です。 。

    次のステップは、row_number()を追加することだけです。 入力が出力よりも大きい最初の行を見つけて、この行と残りの差を表示します。

    この条件:or oq2 is null 他の部分も表示するために必要です(ここではPA000535

    分析関数について読んでください。ネット上には多くのチュートリアルがあります。

    テストデータ:

    create table WA_II_TBL_TR_EQUIPMENT(
        TRANSACTION_EQUIPMENTID varchar2(15), DESCRIPTION varchar2(10), 
        SUPPLIERID_FK number(6), PART_NO varchar2(10), QUANTITY number(6));
    
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201708000002', 'fg',   62551, 'GSDFGSG',  2);
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201709000003', 'fg',   62551, 'PA000535', 7);
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201709000002', 'fg',   62551, 'GSDFGSG',  9);
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201708000004', 'fg',   62551, 'GSDFGSG', 10);
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201708000003', 'fg',   62551, 'GSDFGSG',  2);
    insert into WA_II_TBL_TR_EQUIPMENT values ('TE201709000001', 'Test', 48544, 'Test',     8);
    
    create table WA_II_TBL_TR_OUT_EQUIPMENT(
        TRANSACTION_OUT_EQUIPMENTID varchar2(15), 
        TRANSACTION_EQUIPMENTID_FK varchar2(15), 
        QUANTITY number(6));
    
    insert into WA_II_TBL_TR_OUT_EQUIPMENT values('TOE201709000001', 'TE201708000002', 3);
    

    出力:

    ID              PART_NO          REST
    --------------- ---------- ----------
    TE201708000003  GSDFGSG            20
    TE201709000003  PA000535
    



    1. 第一正規形と姓名

    2. 日付グループ化されたテーブルのデータのsymfony出力

    3. MySQLデータベースをAppEngineアプリケーションで使用できますか

    4. hibernateのbetween句を使用して日付を比較する方法