我有一个表,其中包含超时/超时数据,其结构如下所示。
ID | 日期 | 时间 | 暂停 | 期间 |
---|---|---|---|---|
3 | 2024-01-02 | 01:00 | 02:00 | 01:00 |
3 | 2024-01-02 | 02:30 | 07:00 | 04:30 |
3 | 2024-01-02 | 09:00 | 09:10 | 00:10 |
3 | 2024-01-02 | 09:10 | 09:30 | 00:20 |
3 | 2024-01-02 | 12:00 | 12:25 | 00:25 |
持续时间少于 30 分钟的计时头寸不应考虑计算。但是,如果一天连续两次计时超过或等于 30 分钟,则应考虑。如上例所示,第 3 行超时与第 4 行计时相同:09:00-09:10/09:1--09:30。它们被视为单次计时,如果总时间超过 30 分钟,则应添加。我提出了以下查询来获取每日总持续时间(不包括少于 30 分钟的持续时间,但不包括如上所述的计时持续时间)。
SELECT
DATE, TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(duration))),'%H:%i' ) AS total,
SUM(TIME_TO_SEC(duration)) AS seconds
FROM
`timeintable`
WHERE
id = '3' AND( DATE BETWEEN '2024-01-01' AND '2024-01-10') AND(TIME_TO_SEC(duration) >= 1800)
GROUP BY
DATE
ORDER BY
DATE ASC
是否可以通过 SQL 查询而不是 php 数组循环来实现相同的目的?我使用 LEAD/LAG 函数的尝试没有成功。
一步一步摆弄一些评论。