有一需求,赐教各位大神

[复制链接]
查看11 | 回复8 | 2021-1-27 05:06:14 | 显示全部楼层 |阅读模式
数据库a
字段uid,b,c
其值如下:
uidbc
111
211
311
121
221
321
130
231
330
141
240
341
151
250
351
161
261
361
171
271
371
需求:
求各个UID的c最新连续=1的次数
最后结果是
uidbnum
174次
272次
374次
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
你的需求不是很明确啊?
求各个UID的c最新连续=1的次数没有太明白,你可以再描述清楚些
还有,你给出的结果对么?
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
结果正确的
需求的意思就是:
求不同的uid,c=1连续出现的次数,要求出最新的次数,就如给的结果一样啊,那个结果就是最新的c=1连续次数
引用1楼getdate的回复:你的需求不是很明确啊?
求各个UID的c最新连续=1的次数没有太明白,你可以再描述清楚些
还有,你给出的结果对么?

回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
就是uid=1的c=1的有2次连续出现的次数,1次是2次,1次是4次,4次那个是最新的
其他的uid类似
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
引用3楼chinmo的回复:就是uid=1的c=1的有2次连续出现的次数,1次是2次,1次是4次,4次那个是最新的
其他的uid类似

嗯,需求清楚了,这种SQL语句,有难度啊,要是用程序来处理,还行,要是用SQL语句来处理,没想出啥好办法.
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
mysql>select*froma;
+------+------+------+
|uid|b|c|
+------+------+------+
|1|1|1|
|2|1|1|
|3|1|1|
|1|2|1|
|2|2|1|
|3|2|1|
|1|3|0|
|2|3|1|
|3|3|0|
|1|4|1|
|2|4|0|
|3|4|1|
|1|5|1|
|2|5|0|
|3|5|1|
|1|6|1|
|2|6|1|
|3|6|1|
|1|7|1|
|2|7|1|
|3|7|1|
+------+------+------+
21rowsinset(0.01sec)
mysql>selectuid,max(b),count(*)
->fromat1
->wherec=1
->andbandb>(selectmax(b)fromawhereuid=t1.uidandc=0)
->groupbyuid
->orderbyuid;
+------+--------+----------+
|uid|max(b)|count(*)|
+------+--------+----------+
|1|7|4|
|2|7|2|
|3|7|4|
+------+--------+----------+
3rowsinset(0.01sec)
mysql>
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
引用5楼ACMAIN_CHM的回复:mysql>select*froma;
+------+------+------+
|uid|b|c|
+------+------+------+
|1|1|1|
|2|1|1|
|3|1|1|
|1|2|1|
|2|2|1|
|3|2|1|
|1|3|0|
|2|3|1|
|3|3|0|
|1|4|1|
|2|4|0|
|3|4|1|
|1|5|1|
|2|5|0|
|3|5|1|
|1|6|1|
|2|6|1|
|3|6|1|
|1|7|1|
|2|7|1|
|3|7|1|
+------+------+------+
21rowsinset(0.01sec)
mysql>selectuid,max(b),count(*)
->fromat1
->wherec=1
->andbandb>(selectmax(b)fromawhereuid=t1.uidandc=0)
->groupbyuid
->orderbyuid;
+------+--------+----------+
|uid|max(b)|count(*)|
+------+--------+----------+
|1|7|4|
|2|7|2|
|3|7|4|
+------+--------+----------+
3rowsinset(0.01sec)
mysql>

试过这语句,好慢,才几万条数据就运行卡主了
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
楼主你这个表信息不够吧
既然你要求的是“最新”,那么表里必须要有个字段标记记录产生的先后次序
而一般在数据库里,在查询时如果不加上orderby子句,查询结果是不保证会按数据的实际生成时间排序的
如此一来,楼上几位的查询都无法保证结果是正确的
回复

使用道具 举报

千问 | 2021-1-27 05:06:14 | 显示全部楼层
selectuid,max(b),sum(c)fromagroudbyuid;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行