Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz wiersze, aż zostanie osiągnięta łączna kwota w kolumnie (mysql)

Nie jest ładna, ale myślę, że to wystarczy i może może być podstawą czegoś mniej kłopotliwego. Zwróć uwagę, że używam „fałszywego” SPRZECZENIA WEWNĘTRZNEGO tylko po to, aby po raz pierwszy zainicjować jakąś zmienną — nie spełnia ona żadnej innej roli.

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. Wyniki w promieniu - Optymalizacja powolnego zapytania MySQL

  2. Jak wybrać DISTINCT wiersze bez zaznaczenia pola ORDER BY?

  3. MySQL:Ustaw zmienną użytkownika z wyniku zapytania

  4. Node.js synchronicznie zapętla się lub iteruje po asynchronicznych instrukcjach

  5. PHP SQL :Jak zapisać dane do wielu baz danych z jednego formularza html LUB jak automatycznie skopiować dane z jednej bazy danych do innej bazy danych