Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何得到Mysql每个分组中的第N条记录_创想鸟

如何得到Mysql每个分组中的第N条记录

问题背景

1) 限制:每个用户在一个类目下,最多享受4单满送优惠。

即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单

如何得到每个用户同一类目下第四单ID呢?

%ign%ignore_a_1%re_pre_1%

可惜Mysql并没有分组函数可以方便的得到每组中第四个id。但可以有变通方案, 如有如下的表

select * from t;+----+--------+----------------------------------+| id | status | user_id                          |+----+--------+----------------------------------+|  1 | 10     | 24e568a88fae11e6bb0650b497d97cdd ||  2 | 10     | 24e568a88fae11e6bb0650b497d97cdd ||  3 | 20     | 24e568a88fae11e6bb0650b497d97cdd ||  4 | 20     | 24e568a88fae11e6bb0650b497d97cdd ||  5 | 10     | e8669ac28fae11e6bb0650b497d97cdd ||  6 | 20     | e8669ac28fae11e6bb0650b497d97cdd ||  7 | 10     | e8669ac28fae11e6bb0650b497d97cdd ||  8 | 20     | e8669ac28fae11e6bb0650b497d97cdd ||  9 | 10     | e8669ac28fae11e6bb0650b497d97cdd |+----+--------+----------------------------------+

如何得到每个用户第二次成功支付(status=’10’)的订单呢?

青泥AI 青泥AI

青泥学术AI写作辅助平台

青泥AI 302 查看详情 青泥AI

QQ图片20161122092324.png

方法一 — 逐个查询

select * from t where user_id = '24e568a88fae11e6bb0650b497d97cdd' and status = '10' order by id limit 1,1;+----+--------+----------------------------------+| id | status | user_id                          |+----+--------+----------------------------------+|  2 | 10     | 24e568a88fae11e6bb0650b497d97cdd |+----+--------+----------------------------------+

方案二 — 一次性查询

SELECT     *FROM    (SELECT         id,            user_id,            @rank:=IF(@current_user_id = user_id, @rank + 1, 1) rank,            @current_user_id:=user_id    FROM        (SELECT @current_user_id:=NULL, @rank:=NULL) vars, t    WHERE        t.status = '10'    ORDER BY user_id , id) aWHERE    rank = 2;    +----+----------------------------------+------+----------------------------------+| id | user_id                          | rank | @current_user_id:=user_id        |+----+----------------------------------+------+----------------------------------+|  2 | 24e568a88fae11e6bb0650b497d97cdd |    2 | 24e568a88fae11e6bb0650b497d97cdd ||  7 | e8669ac28fae11e6bb0650b497d97cdd |    2 | e8669ac28fae11e6bb0650b497d97cdd |

原理解释

先按user_id和id顺序排序, 然后从1开始分配序号,同一用户就递增,不同用户则重新从1开始。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1082249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
腾讯光子工作室研发,SE正版授权《最终幻想14:水晶世界》全球首曝
上一篇 2025年12月2日 19:10:55
Java程序内置JRE无需本地JDK
下一篇 2025年12月2日 19:11:01

相关推荐

发表回复

登录后才能评论
关注微信