[英]postgresql- calculating difference between rows
大家好,下面是我的數據庫架構,我需要能夠生成一個查詢,以便我看到每個史詩,現在的 bid_px 和 5 分鍾前的 bid_px 之間的區別
epic t bid_px ask_px
MARKET:IX.D.FANG.DAILY.IP 2019-12-17 13:25:19 2985.5 2988.5
MARKET:IX.D.FTSE.MONTH1.IP 2019-12-17 13:25:17 7516.3 7520.3
MARKET:IX.D.FTSE.MONTH1.IP 2019-12-17 13:25:15 7515.8 7519.8
MARKET:IX.D.FTSE.MONTH1.IP 2019-12-17 13:25:15 7516 7520
MARKET:KB.D.MID250.MAR.IP 2019-12-17 13:25:15 21700 21852
MARKET:IX.D.FTSE.MONTH1.IP 2019-12-17 13:25:14 7516 7520
MARKET:KB.D.MID250.DEC.IP 2019-12-17 13:25:13 21645 21775
MARKET:KB.D.MID250.DEC.IP 2019-12-17 13:25:11 21645 21776
我提出了以下查詢:
SELECT
(SELECT bid_px as val2
from
ig_markets where t<NOW() order by t desc limit 1
) -
(SELECT bid_px as val1
from
ig_markets WHERE t<NOW()- INTERVAL '3 minutes' order by t desc limit 1
) AS total_count
上面顯示了每個史詩的總結果,我希望它列出史詩和差異,例如:
epic | total_count
MARKET:IX.D.FANG.DAILY.IP,10
MARKET:KB.D.MID250.DEC.IP,-10
MARKET:IX.D.FTSE.MONTH1.IP,6
我不完全確定我理解你的問題,但我相信一個子查詢可以幫助你,例如
SELECT
t1.epic, t1.bid_px -
(SELECT t2.bid_px FROM ig_markets t2
WHERE t2.epic = t1.epic AND
t2.t < now() - INTERVAL '3 minutes'
ORDER BY t DESC LIMIT 1)
FROM ig_markets t1
WHERE t1.t < now();
編輯:刪除重復項(未經測試)並選擇最后一個時間戳 - 請參閱下面的評論。
SELECT DISTINCT ON (t1.epic)
t1.epic, t1.bid_px -
(SELECT t2.bid_px
FROM ig_markets t2
WHERE t2.epic = t1.epic AND t2.t < now() - INTERVAL '3 minutes'
ORDER BY t DESC LIMIT 1)
FROM ig_markets t1 WHERE t1.t < now()
或者使用 CTE
WITH j AS (
SELECT t,
t1.epic, t1.bid_px -
(SELECT t2.bid_px FROM ig_markets t2
WHERE t2.epic = t1.epic AND
t2.t < now() - INTERVAL '3 minutes'
ORDER BY t DESC LIMIT 1) AS diff
FROM ig_markets t1
WHERE t1.t < now() )
SELECT DISTINCT ON (epic) max(t), epic, diff FROM j
GROUP BY epic, diff
ORDER BY epic;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.