SQLite:两个日期之间的差异总和按日期分组

问题描述 投票:0回答:1

我有一个带有启动和停止日期时间的SQLite数据库

sqlite start and stop times

使用以下SQL查询,我得到开始和停止之间的小时数差异:

SELECT starttime, stoptime, cast((strftime('%s',stoptime)-strftime('%s',starttime)) AS real)/60/60 AS diffHours FROM tracktime; 

difference hours between two dates

我需要一个SQL查询,它提供多个时间戳的总和,按每天分组(也是时间戳之间的整个日期)。

结果应该是这样的:

  • 2018-08-01:12小时
  • 2018-08-02:24小时
  • 2018-08-03:12小时
  • 2018-08-04:0小时
  • 2018-08-05:1小时
  • 2018-08-06:14个小时
  • 2018-08-07:8小时
sql sqlite datetime group-by timestamp
1个回答
1
投票

您可以尝试这个,使用CTE RECURSIVE为每个日期开始时间和结束时间制作一个日历表,并进行一些计算。

Schechma(莎莎18)

CREATE TABLE tracktime(
  id int,
  starttime timestamp,
  stoptime timestamp
);

insert into  tracktime values 
(11,'2018-08-01 12:00:00','2018-08-03 12:00:00');
insert into  tracktime values 
(12,'2018-09-05 18:00:00','2018-09-05 19:00:00');

查询#1

WITH RECURSIVE cte AS (
    select id,starttime,date(starttime,'+1 day') totime,stoptime
    from tracktime
    UNION ALL
    SELECT  id,
            date(starttime,'+1 day'),
            date(totime,'+1 day'),
            stoptime
    FROM cte
    WHERE date(starttime,'+1 day') < stoptime
)

SELECT  strftime('%Y-%m-%d', starttime),(strftime('%s',CASE 
              WHEN totime > stoptime THEN stoptime
              ELSE totime
            END) -strftime('%s',starttime))/3600 diffHour
FROM cte;

| strftime('%Y-%m-%d', starttime) | diffHour |
| ------------------------------- | -------- |
| 2018-08-01                      | 12       |
| 2018-09-05                      | 1        |
| 2018-08-02                      | 24       |
| 2018-08-03                      | 12       |

View on DB Fiddle

© www.soinside.com 2019 - 2024. All rights reserved.