Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih baris sampai jumlah total terpenuhi di kolom (mysql)

Itu tidak cantik, tapi saya pikir ini berhasil dan mungkin itu bisa menjadi dasar dari sesuatu yang kurang rumit. Perhatikan bahwa saya menggunakan INNER JOIN "palsu" hanya untuk mendapatkan beberapa variabel yang diinisialisasi untuk pertama kalinya--tidak ada peran lain.

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. Apa yang Setara dengan DATALENGTH() di MySQL?

  2. Bagaimana cara mengubah tindakan referensial kunci asing? (perilaku)

  3. Mengimpor data CSV menggunakan PHP/MySQL

  4. Kode Kesalahan:1406. Data terlalu panjang untuk kolom - MySQL

  5. COUNT(id) vs. COUNT(*) di MySQL