Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql组concat和减法值_Php_Mysql_Sql_Group Concat - Fatal编程技术网

Php Mysql组concat和减法值

Php 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

我试着计算数值的差异​​从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
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