我有一个数据表,其中指标为数字,不是ID或外键。这个数字在表格中重复了几次。
我需要打印包含incremental row number within the same indicator value
的所有行,因此1有2次,2有3次,3有1次。
期望的输出:
name | indicator | rownumber
a 1 1
b 1 2
c 2 1
d 2 2
e 2 3
f 3 1
我找到this解决方案来计算行数,但如果指标发生变化,我不知道如何重置计数器。
我到目前为止的查询是,但这是逐步计算行
SELECT name, indicator,
@rownum := @rownum + 1 as row_number
FROM rownumtable
CROSS JOIN (SELECT @rownum := 0) r
ORDER BY name ASC
但它会打印行号 - 请在SQL Fiddle
上查看name | indicator | row_number
a 1 1
b 1 2
c 2 3
d 2 4
e 2 5
f 3 6
有没有办法如何在MySQL查询中为特定的相同值组重置row_number计数器?
答案 0 :(得分:1)
SELECT name, indicator,
@rownum := case when @prevIndicator <> indicator then 1 else @rownum + 1 end as rownumber,
@prevIndicator := indicator
FROM rownumtable
CROSS JOIN (SELECT @rownum := 0, @prevIndicator := 0) r
ORDER BY name ASC