SQLite / Java将每个名称的最新时间戳与24小时前的时间戳进行比较

时间:2018-07-29 10:59:03

标签: java sql sqlite

我正在尝试从最近的时间戳记中获取数据,并从表中的每个名称获取24小时前的时间戳记。我当前的方法进行两个单独的查询,并将结果合并。但是,这很慢,并且也阻止了我对数据进行排序(通过注释等)

以下查询获取24小时前(最后一次)的数据

SELECT Price, comment ,name, timestamp
FROM details INNER JOIN car ON details .ID=car.ID
WHERE timestamp >= datetime('now','-1 day') and name = 'BMW'
order by timestamp asc limit 1

然后我有另一个类似的查询,该查询返回带有最近时间戳记的数据(第一个)。

我有一个Java方法,其中包含上述查询,并将新的汽车名称传递到name =“”部分。这将返回每辆车的第一个和最后一个,然后我比较价格和评论详细信息并返回结果。

然而,事实证明这是一个非常缓慢的过程。这也意味着我无法高效地订购结果。

我也尝试使用union,但是确实提供了预期的结果

SELECT Price, comment ,name, max(timestamp)
FROM details INNER JOIN name ON details .ID=name .ID

UNION
SELECT Price, comment,name, min(timestamp)
FROM details  INNER JOIN name ON details .ID=name .ID
WHERE timestamp >= datetime('now','-1 day')
group by name
order by comment desc
limit 40

执行此查询的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

假设validate :final_selected_time_should_be_NICE private def final_selected_time_should_be_NICE return if final_selected_time ... # is ok errors.add(:final_selected_time, :not_appropriate) end 是唯一的(即等于cars.name,并且您希望将结果放在单独的行上,则可以在子查询中进行汇总以获取两个时间戳。然后,加入您想要的其他信息:

cars.id

答案 1 :(得分:0)

要为每个名称获得一个输出行,请使用GROUP BY:

SELECT Price, comment, name, max(timestamp)
FROM details INNER JOIN name USING (ID)
GROUP BY name.ID

UNION ALL

SELECT Price, comment, name, min(timestamp)
FROM details INNER JOIN name USING (ID)
WHERE timestamp >= datetime('now','-1 day')
GROUP BY name.ID

ORDER BY ...;