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

Làm thế nào để tổng hợp tất cả các hàng dựa trên một cột liệt kê trong PostgreSQL part2?

Để loại trừ khỏi các hàng tính toán sớm hơn Total cuối cùng bạn có thể sử dụng khóa chính trong truy vấn phụ kiện. Khai báo biến mới v_fnserial .Tìm một fnserial của hàng có lần xuất hiện cuối cùng là 'Tổng số' cho pcnum đã cho và fnname và gán giá trị cho v_fnserial Trong truy vấn chính, hãy thêm điều kiện fnserial > v_fnserial .

Bạn nên nêu ra một ngoại lệ khi truy vấn chính trả về null .

IF NEW.timetype = 'Total' THEN
    SELECT fnserial INTO v_fnserial
    FROM mytable 
    WHERE timetype = 'Total' AND pcnum = NEW.pcnum AND fnname = NEW.fnname
    ORDER BY fnserial DESC LIMIT 1;

    SELECT SUM(timeelapse) FROM (
        SELECT DISTINCT ON (floor(timeindex)::int) floor(timeindex)::int timeindex, timeelapse 
        FROM mytable 
        WHERE fnserial > coalesce(v_fnserial, 0) AND pcnum = NEW.pcnum AND fnname = NEW.fnname AND timetype = 'Lap' 
        ORDER BY 1, 2 DESC) alias 
    INTO v_sumtimeelapse_fn;
    IF v_sumtimeelapse_fn NOTNULL THEN
        NEW.timeelapse := v_sumtimeelapse_fn;
    ELSE
        RAISE EXCEPTION USING MESSAGE = 'There is not any previous row...';
    END IF;
END IF;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thiếu mục nhập mệnh đề FROM cho bảng Grupo cakephp

  2. Cách statement_timestamp () hoạt động trong PostgreSQL

  3. Django. PostgreSQL. regexp_split_to_table không hoạt động

  4. giới hạn giá trị của trường với giá trị từ bảng khác trước khi ghi

  5. Django cố định không thành công, cho biết DatabaseError:giá trị quá dài đối với ký tự loại thay đổi (50)