跨越从其他表获得的多个范围的SQLite查询

时间:2014-05-25 21:51:38

标签: sql sqlite android-sqlite

我需要帮助编写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次查询。

1 个答案:

答案 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