回答

收藏

每个不同列值的自动编号和重置计数

技术问答 技术问答 227 人阅读 | 0 人回复 | 2023-09-12

我试图找出如何重置给定列中的每个不同值mysql中号。最好用一个例子来解释:) N, _- Q1 {* M+ P% [
我有一组用户访问客户,每个客户可能会被访问很多次,我的表记录了访问日期(但不是第一次、第二次、第三次)。所以我的桌子看起来像:
3 ^0 ]# C- v% x% c' b& j  G0 Uclientid   visitdate1000        100100-apr-2012101年      155-apr-20121011       255-apr-2012102        26262-apr-20121000        28828-apr-2012我想找到的是在给定的日期内进行了多少次(例如)第二次访问。因此,在上述数据中,有三次第一次访问和两次第二次访问。
/ t6 [4 W% {  l4 ^7 K8 V$ z假设我需要使用类似的假设@rownum像这样的功能:( H- `1 E7 M7 d4 n
SELECT visitdate,clientid @rownum:= @rownum   1作为访问行,(SELECT @rownum:=
$ l( u. T: ~  p5 B6 u. C4 w0)ORDER BY clientid,visitdate
3 F& M1 I# ^6 [这给了我:
# ^+ [5 J, Z4 \clientid   visitdate     row1000        100100-apr-2012年  1100        28828-apr-2012年  2101        1555-apr-2012年  3101        2555-apr-2012年   4102        2626-apr-2012   5但我真正想要的是:
" w9 s4 h7 p, y5 p5 nclientid   visitdate     row1000        100100-apr-2012   1100        28-apr-2012年  2101        1555-apr-2012年  1101       255-apr-2012年  2102        26262-apr-2012   1我遇到的每一个麻烦都是怎样的?clientid重置行计数器。
! e) f7 J: ~- A+ w+ c! T也许我用错误的方式实现了这个目标,并且可以应用程序(PHP)这些计算是在代码中进行的,但我觉得应该是在db能实现的。
5 f6 ?9 D/ c* _/ N! y# ]我已经看到了SQLServer(例如:http :; h* D& C2 g, K- G3 Q: Y
//www.sqlmonster.com/Uwe/Forum.aspx/sql-server-programming/74891/Auto-number-( J$ h) z; K6 Y3 R. \( {* ~* C
and-reset-based-on-data-value-
2 ?5 D* K$ y7 \# z) j( z" r! Tin-a),但似乎不适用mysql吗?/ ~  L4 }0 h3 _5 t& h/ `* x
非常感谢您的帮助/建议。
8 R8 g# X; ?( y8 I  q4 L                                                               
# D1 a! @$ C: Q7 f    解决方案:                                                               
4 X/ Q, p/ K3 ]                                                                未经测试,但这应该能够解决问题:" h9 w; @) ^6 C% {
SELECTIF(@prev != a.clientid,@rownum:=1,@rownum:=@rownum 1) as rownumber,@prev:=a.clientid,a.*FROM (SELECT visitdate,clientid FROM visit,(SELECT @rownum := 0,@prev:='') sqORDER BY clientid,visitdate) a顺便说一句,没有  @rownum它只是一些自制的解决方案,@ rownum只是变量。你最好把它命名为@whatever。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则