如何在sqlite上获取时间平均值

how to get the time average on sqlite

我在 SQLite 中有一个 table,其中有 3 列 time、scramble 和 datetime。

我需要计算 time 列的平均值,它的格式符合 SQLite 的文档,关于 日期和时间数据是00:00:00.000 %H%M%f

如果我使用 minmax 函数

select min(time) from records. 要么 select max(time) from records.

returns 一个正确的值。

但如果我使用

select avg(time) from records.

它returns 0.0
我读过它,AVG 函数的文档说没有 TEXT 有效 数据格式,我已经以编程方式完成,但我想知道是否存在针对此的函数或查询。

TFYT.

首先,您必须使用 strftime('%s', time) 获取 unix 纪元时间(自 1970-01-01 以来的秒数),然后乘以 1000 并加上毫秒数。
结果为整数,可取平均值
这个平均值是一个浮点数,必须除以 1000 并转换为整数,以便可以使用 time() 函数将其转换回 TIME:

SELECT time(
          CAST(AVG(strftime('%s', time) * 1000 + SUBSTR(time, -3)) / 1000 AS INTEGER), 
         'unixepoch'
       )
FROM records

实际上在计算中使用毫秒并不能获得更高的准确度,所以分别取毫秒的平均值并连接:

SELECT time(AVG(strftime('%s', time)), 'unixepoch') || '.' ||
       printf('%03d', AVG(SUBSTR(time, -3))) average_time
FROM records

为了更准确,试试这个:

WITH cte AS (
  SELECT AVG(strftime('%s', time) * 1000 + SUBSTR(time, -3)) avg_seconds
  FROM records
)
SELECT time(CAST(avg_seconds / 1000 AS INTEGER), 'unixepoch') 
       || '.' ||
       printf('%03d', ROUND(avg_seconds) % 1000) average_time
FROM cte

查看简化版 demo