【发布时间】:2018-07-29 10:59:02
【问题描述】:
我正在尝试从最近的时间戳中获取数据,以及表中每个名称的 24 小时前的时间戳。我当前的方法进行两个单独的查询并组合结果。但是,这很慢,并且还阻止我对数据进行排序(通过 cmets 等)
以下查询获取 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 = " " 部分。这会返回每辆车的第一个和最后一个,然后我比较价格和评论详细信息并返回结果。
然而,事实证明这是一个非常缓慢的过程。这也意味着我无法有效地排序结果。
我也尝试过联合,但它确实提供了预期的结果
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
执行此查询的正确方法是什么?
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
这是否意味着java端有很多车名(10、100、1000辆车),而java代码对每个车名分别循环调用这两个查询?如果是这样,那么这必须缓慢工作。在这种情况下,最好只触发一次查询所有汽车名称的数据。