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

как да дам същия сериен номер за група записи в mysql

Вашите групи се дефинират, като се започне с code = 100 . Това е малко сложно. В MySQL 8+ можете да използвате функциите на прозореца, за да дефинирате групите и след това row_number() за присвояване на 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;

Това е много по-сложно в по-ранните версии на MySQL.

Можете да идентифицирате групата с помощта на подзаявка:

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

След това можете да използвате променливи, за да получите информацията, която искате:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Изберете всички дати между диапазона от време и получете дати, съответстващи на данните в таблицата

  2. Съхранение на много големи цели числа в MySQL

  3. Как да изберете сума -или- 0, ако няма записи?

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

  5. Заявката, използваща group_concat, връща само един ред