sqlite - 查询在 SQLite 中不起作用
问题描述
为什么这在 SQLite 但在 MySQL 中不起作用?如果你能帮助我,那就太好了!
其他问题:我可以用连接替换子选择吗?
SELECT h1.drivers.name, SUM((
SELECT kilometers FROM history AS h2
WHERE h2.timestamp >= h1.timestamp
AND h1.id != h2.id
GROUP BY h2.timestamp HAVING MIN(h2.timestamp) LIMIT 1
) - h1.kilometers) AS driven_kilometers
FROM history AS h1
INNER JOIN drivers ON drivers.id = h1.driver_id
GROUP BY h1.driver_id
为了澄清我的问题:
╔════╦═════════╦═════════════════════╦═══════════════╗
║ id ║driver_id║ timestamp ║ kilometers ║
╠════╬═════════╬═════════════════════╬═══════════════╣
║ 1 ║ 1 ║ 2018-07-01 12:00:04 ║ 0 ║
║ 2 ║ 2 ║ 2018-07-01 16:05:12 ║ 120 ║
║ 3 ║ 1 ║ 2018-07-06 11:13:59 ║ 220 ║
║ 4 ║ 2 ║ 2018-07-09 09:17:19 ║ 250 ║
║ 5 ║ 1 ║ 2018-07-12 10:02:00 ║ 300 ║
║ 6 ║ 2 ║ 2018-07-16 07:11:21 ║ 320 ║
╚════╩═════════╩═════════════════════╩═══════════════╝
我想计算行驶公里数。司机在开始驾驶时会添加一个数据集,以便他们插入对方驾驶的公里数。
示例:我要计算的驾驶员 2 的公里数:220-120 + 300-250 = 150
司机 1 的公里数:我要计算:120-0 + 250-220 + 320-300 = 170
解决方案
在子查询中,分组没有意义,因为时间戳无论如何都是唯一的。
要从具有下一个最大时间戳的行中获取值,只需将 ORDER BY 与 LIMIT 一起使用:
SELECT drivers.name,
SUM((SELECT kilometers
FROM history AS h2
WHERE h2.timestamp > h1.timestamp
ORDER BY h2.timestamp
LIMIT 1
) - h1.kilometers
) AS driven_kilometers
FROM history AS h1
INNER JOIN drivers ON drivers.id = h1.driver_id
GROUP BY h1.driver_id;
推荐阅读
- python - 发现这个示例代码试图运行它,但它没有工作
- android - 如何在印度的像素 4 中启用运动感应。使用亚行
- c# - C# WPF 设置系统变量 Windows 10
- typescript - 如何在 TypeScript 中将函数的返回类型指定为命名空间类型,以便提出建议
- python - 如何在 pybind11 中正确公开从 Eigen::Matrix 派生的自定义 Vector 类?
- java - 我无法在 JENA 中获得 Restriction 的特征
- python - 竞争性编程:我的代码有什么问题?我的代码运行成功,但代码不会提交
- php - 嵌套数组,用数字替换字母键并保持结构
- firebase - Google Cloud Platform 中的 Firebase 实时数据库
- python - % 增加数字记录中的值