0

我想连续对文件集块进行编号,例如从 1 到 3。

假设我有以下内容:

ID | random_nr | ordering
.. | .. | ..
19 | 12 | 2
19 | 21 | 3
20 | 13 | 1*
20 | 14 | 2*
20 | 22 | 3*
21 | 15 | 1
21 | 17 | 2
.. | .. | 

到目前为止,我的代码仅通过以下方式设置所有数字:

SET @c = 0; 
SELECT
`ID`,
`random`,
(@c := @c + 1) AS "ordering"
FROM `tabelle` WHERE ...

我怎么能改变它,所以我得到上面提到的结果?太感谢了!!

4

2 回答 2

0

这是一种方法...

 SELECT x.*
      , COUNT(*) ordering 
   FROM tabelle x 
   JOIN tabelle y 
     ON y.id = x.id 
    AND y.random_nr <= x.random_nr 
  GROUP 
     BY x.id
      , x.random_nr;

另一种方法是将@curr 和@prev 标记添加到现有查询中。

于 2013-03-21T11:49:15.510 回答
0
SET @i = null;
SELECT
`ID`,
`random`,
(@c := IF(ID = @i, @c + 1, 1) + (@i:=ID)-ID AS "ordering"
FROM `tabelle` WHERE ...
ORDER BY ID

所以每次 ID等于 @i 的当前值时,@c 从 1 开始。

于 2013-03-21T12:07:33.760 回答