用户变量:以“@”开始,形式为“@变量名”。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。

全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set
@@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量。

会话变量:只对连接的客户端有效。

局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量。

通过变量简单实现一下:
SELECT @rank := IF(@bid = tv.ZId, @rank := @rank + 1, @rank := 1) AS RANK, @bid
:= tv.ZId AS ZID, tv.ZTime FROM (SELECT * FROM tb_chestnut ORDER BY ZId, ZTime)
tv, (SELECT @rank := 0, @bid := NULL) z;

通过变量简单实现一下:
SELECT tv.ZSort, @bid := tv.ZId, @stime := IF(@bid = tv.ZId AND tv.ZSort = 1,
tv.ZTime, IF(@etime IS NULL, tv.ZTime, @etime)) AS stime, @etime := DATE_ADD(
@stime, INTERVAL tv.ZNum HOUR) AS etime, tv.ZNum FROM (SELECT * FROM tb_chestnut
ORDER BY ZId, ZSort) tv, (SELECT @stime := NULL, @etime := NULL, @bid := NULL) z
;

注:针对于分组排名问题mysql8.0版本可以使用row_number()over(partition by desc)

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信