首页 > 解决方案 > 同一列中 2 个日期时间元素的 SQL LITE 差异

问题描述

我是 SQL lite 的新手,我有一个这种格式的日期时间列:

ID 约会时间
1 2020-12-26 19:08:49
2 2020-12-26 19:08:50
3 2020-12-26 19:08:51
4 2020-12-26 19:08:51
5 2020-12-26 19:09:07
6 2020-12-26 19:11:45
7 2020-12-26 19:52:49
8 2020-12-26 19:52:50

我如何计算第一个元素与第二个第三个元素与第四个元素之间的差异?

标签: databasesqlite

解决方案


使用窗口函数FIRST_VALUE()获取第一行的日期时间,使用该函数strftime()可以计算每行的差异:

SELECT *
FROM (
  SELECT id,
         strftime('%s', datetime) - strftime('%s', FIRST_VALUE(datetime) OVER (ORDER BY id)) AS diff_in_secs
  FROM tablename
)
WHERE id > 1

或自加入:

SELECT t.id, 
       strftime('%s', t.datetime) - strftime('%s', m.datetime)
FROM tablename t
INNER JOIN (SELECT * FROM tablename ORDER BY id LIMIT 1) m
ON m.id < t.id

我使用idanddatetime作为列名和tablename表名,您可以将它们更改为实际名称。

演示
结果:

> id | diff_in_secs
> -: | -----------:
>  2 |            1
>  3 |            2
>  4 |            2
>  5 |           18
>  6 |          176
>  7 |         2640
>  8 |         2641

推荐阅读