为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2021-06-15 09:22:16
我试图从最近的时间戳中获取数据,以及表中每个名称的 24 小时前的时间戳。我当前的方法进行两个单独的查询并组合结果。然而,这很慢,并且还阻止我对数据进行排序(通过评论等)以下查询获取 24 小时前(最后)的数据SELECT Price, comment ,name, timestampFROM details INNER JOIN car ON details .ID=car.IDWHERE 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 .IDUNIONSELECT Price, comment,name, min(timestamp)FROM details  INNER JOIN name ON details .ID=name .IDWHERE timestamp >= datetime('now','-1 day')group by nameorder by comment desclimit 40执行此查询的正确方法是什么?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

假设这cars.name是唯一的(即等效于cars.id并且您希望结果在单独的行上,您可以在子查询中进行聚合以获得两个时间戳。然后,加入您想要的附加信息:


SELECT c.name, d.Price, d.comment, d.name, d.timestamp

FROM 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;


查看完整回答
反对 回复 2021-06-17
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信