row_number()over(partition by DMCOD order by DMPARENTLEV DESC) 适配mysql
时间: 2024-02-23 11:55:24 浏览: 122
row_number,根据多个字段过滤,partition by
在MySQL中,没有直接提供row_number()函数。但是可以通过使用变量来模拟实现类似的功能。下面是一个示例:
```
SELECT
@row_number := CASE
WHEN @dmcod = DMCOD THEN @row_number + 1
ELSE 1
END AS row_number,
@dmcod := DMCOD AS DMCOD,
DMPARENTLEV
FROM
your_table,
(SELECT @row_number := 0, @dmcod := '') AS t
ORDER BY
DMCOD, DMPARENTLEV DESC;
```
在上述示例中,我们使用了两个变量`@row_number`和`@dmcod`来模拟row_number()函数的功能。首先,我们初始化这两个变量为0和空字符串。然后,在SELECT语句中,我们使用CASE语句来判断当前行的DMCOD是否与前一行相同。如果相同,则将`@row_number`加1;如果不同,则将`@row_number`重置为1。同时,我们将当前行的DMCOD赋值给`@dmcod`变量。最后,按照DMCOD和DMPARENTLEV进行排序。
这样,就可以得到类似于row_number()函数的效果,每个分组内按照DMPARENTLEV降序排列,并且每个分组内的行都有一个递增的行号。
阅读全文