我需要帮助编写sqlite3查询。编辑 - 有一圈到多圈数据,一圈的数据由start_time和end_time定义。
--laps table--
_id
session_id
lap
lap_time
start_time
finish_time
<other columns>
--data table--
_id
session_id
time
rpm
<other columns>
我想获得每圈的单圈,圈速,最小(rpm),平均(rpm)和最大(rpm)(即data.time&gt; laps.start_time&amp;&amp; data.time &lt; laps.finish_time)给定的会话(laps.session_id = data.session_id。所有时间字段都是整数(纳秒),rpm字段是实数。
我已经可以通过查询圈数,砍掉结果集并查询每一圈的数据来做到这一点,但我想用一个查询来做。我不知道如何编写连接和条件,所以感谢任何帮助。
编辑 - 无效解决方案
String query = "SELECT l.lap_num, l.lap_time, " +
"(SELECT min(d."+columnName+") FROM logged_data d WHERE d.time > l.start_time AND d.time < l.finish_time AND d.session_id = l.session_id), " +
"(SELECT avg(d."+columnName+") FROM logged_data d WHERE d.time > l.start_time AND d.time < l.finish_time AND d.session_id = l.session_id), " +
"(SELECT max(d."+columnName+") FROM logged_data d WHERE d.time > l.start_time AND d.time < l.finish_time AND d.session_id = l.session_id) " +
"FROM laps l WHERE l.session_id = " + session_id + ";";
除非有人可以重写,否则我会将此作为答案添加,因此它不会每圈执行3次查询。
答案 0 :(得分:0)
如果我正确理解您的问题,您可以join
将这些表放在一起,并将group by
与多个聚合一起使用:
select l.lap, l.lap_time, min(d.rpm), avg(d.rpm), max(d.rpm)
from laps l
join data d on l.session_id = d.session_id
group by l.lap, l.lap_time