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

Chọn các hàng cho đến khi tổng số tiền được đáp ứng trong một cột (mysql)

Nó không đẹp, nhưng tôi nghĩ điều này làm được và có lẽ nó có thể là cơ sở của một thứ gì đó bớt rườm rà hơn. Lưu ý rằng tôi sử dụng INNER JOIN "giả" chỉ để lấy một số biến được khởi tạo lần đầu tiên - nó không có vai trò nào khác.

SELECT ID,
       supplier,
       qty,
       cumulative_qty
FROM
(
    SELECT
        ID,
        supplier,
        qty,
        -- next line keeps a running total quantity by supplier id
        @cumulative_quantity := if (@sup <> supplier, qty, @cumulative_quantity + qty) as cumulative_qty,
        -- next is 0 for running total < 5 by supplier, 1 the first time >= 5, and ++ after
        @reached_five := if (@cumulative_quantity < 5, 0, if (@sup <> supplier, 1, @reached_five + 1)) as reached_five,
        -- next takes note of changes in supplier being processed
        @sup := if(@sup <> supplier, supplier, @sup) as sup
    FROM
    (
        --this subquery is key for getting things in supplier order, by descending id
        SELECT *
        FROM `sample_table`
        ORDER BY supplier, ID DESC
     ) reverse_order_by_id
    INNER JOIN
    (
        -- initialize the variables used to their first ever values
        SELECT @cumulative_quantity := 0, @sup := 0, @reached_five := 0
    ) only_here_to_initialize_variables
) t_alias
where reached_five <= 1 -- only get things up through the time we first get to 5 or above.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mối quan hệ giữa danh mục, lược đồ, người dùng và phiên bản cơ sở dữ liệu

  2. Tiếp cận nhiều truy vấn MySQL với Node.js

  3. Sử dụng tham số giới hạn nhiều lần

  4. Chúng ta có nên đưa cột sắp xếp, khóa chính vào chỉ mục tổng hợp (MySQL) không

  5. Truy vấn để tìm các bảng được sửa đổi trong giờ trước