下表列出了我在表格中的数据。
+----+------+
| ID | Year |
+----+------+
| 1 | 2005 |
| 1 | 2006 |
| 2 | 2005 |
| 2 | 2007 |
| 2 | 2008 |
| 3 | 2005 |
| 4 | 2009 |
+----+------+
我想写一个查询,它将显示以下结果。
+----+----+------+
| ID |auto| Year |
+----+----+------+
| 1 | 1 | 2005 |
| 1 | 2 | 2006 |
| 2 | 1 | 2005 |
| 2 | 2 | 2007 |
| 2 | 3 | 2008 |
| 3 | 1 | 2005 |
| 4 | 1 | 2009 |
+----+----+------+
如您所见,auto
字段将为每个ID显示增量自动编号。
答案 0 :(得分:3)
在MySQL中执行此操作的最佳方法是使用变量。但是,如果使用变量,则所有赋值都需要在同一个表达式中,因为MySQL不保证SELECT
中表达式的求值顺序。
所以我建议:
select id,
(@rn := if(@i = id, @rn + 1,
if(@i := id, 1, 1)
)
) as auto,
year
from tableX cross join
(select @i := -1, @rn := 0) params
order by id, year;
答案 1 :(得分:0)
devDependencies