簡體   English   中英

SQLite / Java將每個名稱的最新時間戳與24小時前的時間戳進行比較

[英]SQLite / Java Compare most recent time stamp with one from 24hr ago for each name

我正在嘗試從最近的時間戳記中獲取數據,並從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

執行此查詢的正確方法是什么?

假設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;

要為每個名稱獲得一個輸出行,請使用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 ...;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM