php - 使用 sqlite/php 获取两个不同行/列中两个数字的差异

标签 php mysql sql select

我有一个带有名为“events”的表的 SQLite 数据库,它具有以下结构:

rowid       ID                  startTimestamp   endTimestamp
1           00:50:c2:63:10:1a   1000             1010
2           00:50:c2:63:10:1a   1100             1030
3           00:50:c2:63:10:1a   1090             1110   
4           00:50:c2:63:10:1a   1210             1310
.
.
.

计算startTimestamp和endTimestamp之间的平均时间没有问题:

SELECT ID, avg(endTimestamp - startTimestamp) AS duration FROM events WHERE senderID ="00:50:c2:63:10:1a"

但现在我想计算一行和下一行之间的 endTime 和 startTime 之间的平均差异,这对于我的示例来说意味着:

1100-1010 = 90

1090-1030 = 60

1210-1110 = 100


差异总和 = 90 + 60 + 100 = 250

平均差异 = 250/3 = 83,33

有没有办法用 SQL 查询来做到这一点?还是有必要用PHP写一段代码?

最佳答案

SELECT
    id,
    ( MAX(endtimestamp) - MIN(startTimestamp)
    - SUM(endtimestamp-startTimestamp)
    ) / (COUNT(*)-1) AS averageDifference
FROM
    events
GROUP BY
    id ;

在 SQL-Fiddle 测试: test-1 (感谢@bonCodigo)


由于 MIN(endtimestamp) 可能不是具有最低 rowid 的那一个,以上查询需要更正:

SELECT
    id,
    ( ( SELECT endtimestamp FROM events AS ee 
        WHERE ee.id = e.id ORDER BY rowid ASC LIMIT 1 )
    - ( SELECT startTimestamp FROM events AS ee
        WHERE ee.id = e.id ORDER BY rowid DESC LIMIT 1 )
    - SUM(endtimestamp-startTimestamp)
    ) / (COUNT(*)-1) AS averageDifference
FROM
    events AS e
GROUP BY
    id ;

关于php - 使用 sqlite/php 获取两个不同行/列中两个数字的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418104/

相关文章:

php - Laravel如何在自动重定向验证后发送参数以查看

mysql - SQL 映射表可以加快查询速度吗?你如何使用它们?

mysql - 查询中的开始太多,或者这是 kosher?

c# - 如何将这 4 个 SQL 表转换为 OO 类(Java 或 C#),但不使用 NHibernate/LINQ?

sql - 如何在 Hana SQL 中查询最近 90 天(从当前日期减去)

javascript - 如何通过 PHP 使用 onclick() 方法打印 html 代码?

javascript - 通过 AJAX 单击按钮更新表单值

php - .htaccess wordpress wpml 对单独的页面使用相同的标题

mysql - 如何编写选择可变长度子字符串的 SQL 查询

php - 多个结果正在上传到表中