Php Mysql组concat和减法值
我试着计算数值的差异从mysql查询中获取,其中包含数据值以时间格式提取比赛的时间圈数。目标是获得每圈到达之间的圈数。这是餐桌时间 MysqlPhp Mysql组concat和减法值,php,mysql,sql,group-concat,Php,Mysql,Sql,Group Concat,我试着计算数值的差异从mysql查询中获取,其中包含数据值以时间格式提取比赛的时间圈数。目标是获得每圈到达之间的圈数。这是餐桌时间 Mysql SELECT t.number, count(*) as laps, group_concat(time order by t.id separator ',' ) as times, SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) as total FROM times t G
SELECT
t.number, count(*) as laps,
group_concat(time order by t.id separator ',' ) as times,
SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) as total
FROM
times t
GROUP BY
number
ORDER BY
laps DESC, total ASC
此查询的输出为:
number laps times total
--------------------------------------------------------------
9 2 00:00:02,00:00:14 00:00:16.000000
10 1 00:11:09 00:11:09.000000
现在,我需要的是得到每圈的时间长度,加上减法。
有什么建议吗。由于这一结果:
number laps times total
--------------------------------------------------------------
9 2 00:00:02,00:00:12 00:00:14.000000
10 1 00:11:09 00:11:09.000000
似乎您存储了总时间,并希望计算圈数。一种方法是使用子查询
SELECT t.number, COUNT(1) laps,
GROUP_CONCAT(SEC_TO_TIME(time) ORDER BY t.id) times,
SEC_TO_TIME(SUM(time)) total
FROM (
SELECT t1.id, t1.number,
TIME_TO_SEC(t1.time) - COALESCE(SUM(TIME_TO_SEC(t2.time)), 0) time
FROM times t1
LEFT JOIN times t2 ON t1.number = t2.number AND t2.id < t1.id
GROUP BY t1.id, t1.number, t1.time
) t
GROUP BY number
子查询通过从每个圈结束的总时间中减去id较小的相同数字的所有时间来计算圈数。外部查询按照您要查找的格式对圈速进行格式化
.减法意味着什么?从域逻辑的角度来看,这意味着什么?对于Datediff或Timediff,在这种情况下,获取计算00:00:14-00:00:02。。。。除了第一个,例如,如果第一个值更大怎么办?会是负间隔吗?如果有3圈呢?为什么你要减去14-2,而不是相反?我想得到的是正数,从右到左减去,然后得到差分,也就是每个圈的时间,我不理解结果中的1和2。也许数据集应该是9,9,10?谢谢Joachim?答案是:谢谢你,大师
SELECT t.number, COUNT(1) laps,
GROUP_CONCAT(SEC_TO_TIME(time) ORDER BY t.id) times,
SEC_TO_TIME(SUM(time)) total
FROM (
SELECT t1.id, t1.number,
TIME_TO_SEC(t1.time) - COALESCE(SUM(TIME_TO_SEC(t2.time)), 0) time
FROM times t1
LEFT JOIN times t2 ON t1.number = t2.number AND t2.id < t1.id
GROUP BY t1.id, t1.number, t1.time
) t
GROUP BY number