QMqueuing表中有个timenode字段,
timenode用来记录司机入队列的时间,所以可以根据
举例:
SELECT count(1) from QMqueuing where timenode< 1591950907300
查询出司机在此1591950907300时间节点入列时,队列中前面还有几位.
上图,我想曾加一个列,用来记录每个司机在队列中前面都还有几位司机.
最后大概显示如下
请问sql语句该如何写?还请指教一下!
QMqueuing表中有个timenode字段,
timenode用来记录司机入队列的时间,所以可以根据
举例:
SELECT count(1) from QMqueuing where timenode< 1591950907300
查询出司机在此1591950907300时间节点入列时,队列中前面还有几位.
上图,我想曾加一个列,用来记录每个司机在队列中前面都还有几位司机.
最后大概显示如下
请问sql语句该如何写?还请指教一下!
请注意一个细节,前面还有多少位,在有特定排序的情况下和查询结果的 行号
有关
所以逻辑上这样写是可以的
set @idx = 0;
select
t.*,
@idx as `此记录前有多少位`,
@idx := @idx+1
from (/* 你的 sql */) as t
select *,(SELECT count(*) from QMqueuing where timenode< 此司机入队列的timenode) as '此记录前面还有几位' from QMqueuing
* * *
首先计算数据量的时候推荐你使用count(*)因为count(*)是 SQL92 定义的 标准统计行数的语法,其二,一般来说不推荐你使用sql实时计算,你可以在插入数据时,将该字段算出结果后再插入,这样就不需要查询一遍,就计算一遍
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答926 阅读✓ 已解决
首先,没看懂你的问题到底要问什么,建议把建表的sql也放出来。
然后,我连蒙带猜,如果想要第二张截图的结果的话,那么先把你图一中的SQL中,
试一下。
———————————————————————————————
追答,
想了一下,因为有逻辑处理在里面,用纯SQL很难处理,又不能放到代码处理这些逻辑,那吧这些逻辑放到存储过程中,用存储过程来处理。
如果题主的表里确实需要那个统计字段的话,可以像我一样,直接更新这个字段,如果不要,可以创建一个临时表,然后left join两张表。
最后查询结果:

综上,存储过程可以完美解决题主的问题,记得采纳哦。