没有一个行类型的多个日期之间的小时总和

问题描述

我需要增加时间,但要减去状态为“停止”时的时间。我可以进行SQL查询还是需要结合使用SQL + PHP?我得到了这样的数据库。状态可以重演

MariaDB 10.5.11,
PHP 7.4.5

ID Date                 Status

1  2020.11.02 15:00     New 
1  2020.11.02 15:00     New_Step 
1  2020.11.02 15:05     Start 
1  2020.11.02 15:05     Stop   
1  2020.11.02 15:10     Start
1  2020.11.02 15:15     Transferred
1  2020.11.02 15:20     Stop
1  2020.11.02 16:25     End  
2  2020.11.02 16:00     New 
2  2020.11.02 16:00     Start 
2  2020.11.02 16:05     Stop   
2  2020.11.02 16:10     Start
2  2020.11.02 16:15     Stop   
2  2020.11.02 16:20     Start
2  2020.11.02 16:25     New_Step 
3  2020.11.02 16:30     Transferred
2  2020.11.02 16:35     End  

我需要得到这个结果

ID SumTime
1  15 min
2  25 min

我需要在此查询中添加新状态“ Transferred and New_Step”

SELECT t1.ID,SUM(TIMESTAMPDIFF(MINUTE,t1.`Date`,t2.`Date`)) complsum
FROM (SELECT  *,ROW_NUMBER() OVER (PARTITION BY `ID` ORDER BY `Date` ASC) AS row_num 
FROM table1 WHERE `Status` =  'Start') t1 
INNER JOIN (SELECT  *,ROW_NUMBER() OVER (PARTITION BY `ID` ORDER BY `Date` ASC) AS row_num 
FROM table1 WHERE `Status`  IN ('Stop','End')) t2 
ON t1.ID = t2.ID AND t1.`row_num` =  t2.`row_num`
GROUP BY t1.ID

解决方法

您要计算起始状态不是“停止”的所有间隔。您可以只使用lead()和日期算术:

select id,sum(timestampdiff(minute,date,lead_date)) sumtime
from (
    select t.*,lead(date) over(partition by id order by date) lead_date
    from mytable t
) t
where status <> 'Stop'
group by id

请注意,要使此操作始终如一,您需要每个date都是唯一的-否则,对于重复项,未定义的事件顺序必须是唯一的-或者至少,您需要其他条件来打破日期关系,例如自动递增的主键。

这里是一个 demo on DB Fiddle ,它向子查询的order by添加了主键,演示了查询的工作方式。

,

我不了解逻辑,但也许您需要

WITH cte AS (SELECT ID,`Date`
             FROM test
             GROUP BY ID,`Date`
             -- remove timepoint where status is 'Stop' for at least one row
             HAVING !SUM(Status = 'Stop'))

SELECT ID,-- Calculate points amount and multiply by 5,adjust points to ranges between points
       CONCAT(5 * COUNT(`Date`) - 5,' min')
FROM cte
GROUP BY id;

fiddle

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...