Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Permintaan Oracle untuk mendapatkan ID transaksi pertama berdasarkan transaksi keluar yang dikonsumsi

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 

Saya menggabungkan input dan output, kemudian menggunakan fungsi analitik sum() dan max() Saya menyiapkan semua informasi yang dibutuhkan, yang terpenting adalah jumlah kumulatif. Anda dapat melihatnya menjalankan kueri paling dalam secara terpisah, ini alias sebagai tr .

Langkah selanjutnya hanya menambahkan row_number() untuk menemukan baris pertama di mana input lebih besar dari output dan menunjukkan baris ini dan perbedaan yang tersisa.

Kondisi ini:or oq2 is null diperlukan untuk menunjukkan juga bagian lain (di sini PA000535 ).

Silakan baca tentang fungsi analitik, ada banyak tutorial di internet.

Data pengujian:

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);

Keluaran:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cx_Oracle dan paradigma sumber data

  2. Bidang Oracle ke SQL2005 DATETIME meluap di SSIS

  3. Baca ARRAY dari STRUCT yang dikembalikan oleh prosedur tersimpan

  4. Mendapatkan kesalahan ORA - 00907 pada hal berikut di ON UPDATE

  5. Database Oracle 12c Kesalahan saat mencoba menyambung:Adaptor Jaringan tidak dapat membuat sambungan