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

我试图从最近的时间戳中获取数据,以及表中每个名称的 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

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


Helenr
浏览 147回答 2
2回答

慕哥9229398

假设这cars.name是唯一的(即等效于cars.id并且您希望结果在单独的行上,您可以在子查询中进行聚合以获得两个时间戳。然后,加入您想要的附加信息:SELECT c.name, d.Price, d.comment, d.name, d.timestampFROM car c JOIN     details d      ON d.ID = c.ID JOIN     (SELECT dd.ID, MAX(dd.timestamp) as maxts, MIN(dd.timestamp) as mints      FROM detail dd      WHERE dd.timestamp >= datetime('now', '-1 day')      GROUP BY dd.ID     ) dd     ON dd.ID = c.ID AND d.timestamp IN (dd.mints, dd.maxts)ORDER BY timestamp asc;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java