sql日期差异的总和

时间:2015-03-08 14:11:43

标签: android sql sql-server database sqlite

我正在开发一个Android应用程序,它有一个名为&#34的表;条目" 表结构如下

id     name      operation       date
----------------------------------------------
1     engine        on        08-03-2015 19.22
2     engine        off       08-03-2015 19.23
3     light         on        08-03-2015 19.23
4     light         off       08-03-2015 19.28
5     engine        on        08-03-2015 19.28
6     engine        off       08-03-2015 19.30

我想得到如下输出

name    duration
----------------
engine  3
light   5

这是发动机和灯处于开启状态的总时间。 对于发动机的详细信息,时间差b / w开启和关闭状态被添加并作为输出。类似地对于光。 任何人都帮助我 不知道如何开始。 提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用ANSI SQL(与SQL Server和SQLite兼容)通过使用相关子查询来获取每个的“off”值:

select name,
       sum(strftime('%s', offtime) - strftime('%s', date)) as numseconds
from (select e.*,
             (select min(e2.date)
              from entries e2
              where e2.name = e.name and
                    e2.date > e.date and
                    e.operation = 'off'
             ) as offtime
      from entries e
      where operation = 'on'
     ) e
group by name;

请注意,这使用SQLite构造来计算持续时间(以秒为单位)。使用datediff()在SQL Server中有一个类似的构造。

编辑:

在SQL Server中:

select name,
       datediff(seconds, date, offtime) as numseconds
from (select e.*,
             (select min(e2.date)
              from entries e2
              where e2.name = e.name and
                    e2.date > e.date and
                    e.operation = 'off'
             ) as offtime
      from entries e
      where operation = 'on'
     ) e
group by name;