sql >> Databasteknik >  >> RDS >> Mysql

hur man ger samma serienummer för en grupp av poster i mysql

Dina grupper definieras genom att börja med code = 100 . Det här är lite knepigt. I MySQL 8+ kan du använda fönsterfunktioner för att definiera grupperna och sedan row_number() för att tilldela serial_number :

select c.*, 
       row_number() over (partition by grp order by id) as serial_number
from (select c.*,
             sum( code = 100 ) over (order by id) as grp
      from carts c
     ) c;

Detta är mycket mer komplicerat i tidigare versioner av MySQL.

Du kan identifiera gruppen med hjälp av en underfråga:

select c.*,
       (select count(*)
        from carts c2
        where c2.id <= c.id and c2.code = 100
       ) as grp
from carts c;

Du kan sedan använda variabler för att få den information du vill ha:

select c.*,
       (@rn := if(@g = grp, @rn + 1,
                  if(@g := grp, 1, 1)
                 )
       ) as serial_number
from (select c.*,
             (select count(*)
              from carts c2
              where c2.id <= c.id and c2.code = 100
             ) as grp
      from carts c
      order by grp, id
     ) c cross join
     (select @g := -1, @rn := 0) params;


  1. Hur ställer jag in ActiveRecord-frågans timeout för mysql?

  2. Entity Framework + MySQL - Varför är prestandan så hemsk?

  3. Mysql - anslut till fjärrserver med IP-adress

  4. Anslutningspoolning med Pgbouncer på PostgreSQL 9.0