Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете редове, докато се покрие общото количество в колона (mysql)

Не е красиво, но мисля, че това го прави и може би може да бъде в основата на нещо по-малко тромаво. Обърнете внимание, че използвам „фалшиво“ INNER JOIN, само за да инициализирам някаква променлива за първи път – тя няма друга роля.

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. PHP:mysql v mysqli v pdo

  2. Променете функцията на PDO

  3. Най-бързият начин за актуализиране на MySQL таблица, ако съществува ред, вмъкнете. Повече от 2 неуникални ключа

  4. В Django, как да избера 100 произволни записа от базата данни?

  5. MySQL таблица с колона TEXT