Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn Oracle để lấy ID giao dịch đầu tiên dựa trên giao dịch gửi đi đã sử dụng

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 

Tôi kết hợp đầu vào và đầu ra, sau đó sử dụng các hàm phân tích sum()max() Tôi chuẩn bị tất cả các thông tin cần thiết, quan trọng nhất là tổng tích lũy. Bạn có thể thấy nó đang chạy riêng truy vấn bên trong nhất, bí danh này là tr .

Bước tiếp theo chỉ thêm row_number() để tìm (các) hàng đầu tiên trong đó đầu vào lớn hơn đầu ra và hiển thị hàng này và sự khác biệt còn lại.

Điều kiện này:or oq2 is null cũng cần thiết để hiển thị các phần khác (tại đây PA000535 ).

Vui lòng đọc về các hàm phân tích, có rất nhiều hướng dẫn trên mạng.

Dữ liệu thử nghiệm:

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

Đầu ra:

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. Nhận định nghĩa đối tượng lập trình ORACLE

  2. Tại sao nhiều bảng ORACLE mặc định 12c?

  3. Sự tự mãn dẫn đến:Rủi ro trở thành hiện thực

  4. Xử lý thêm dữ liệu như được trả về trong dbms_output đã cho

  5. Sử dụng NVL cho nhiều cột - Oracle SQL