嘗試此高/低/體積
SELECT symbol,
date,
MAX(high) AS dailyhigh,
MIN(low) AS dailylow,
SUM(volume) AS dailyvolume
GROUP BY symbol, date
你會每個符號得到每天一行。
很難說出你如何處理開盤價格。當然,整張桌子上的第一個時間戳,即使沒有日期,也不是正確的方法。所以,讓我們找出每個日期的最早時間戳。
SELECT symbol,
date,
MIN(time) AS opentime
FROM a2a
GROUP BY symbol, date
現在,我們需要查找該時間戳的開盤價格。怎麼做?這會變得更復雜一些,因爲您可能在該問題的特定時間和日期有多行記錄。
SELECT a.symbol,
a.date,
AVG (a.open) AS dailyopen
FROM a2a a
JOIN (
SELECT symbol,
date,
MIN(time) AS opentime
FROM a2a
GROUP BY symbol, date
) AS b ON a.symbol = b.symbol
AND a.date = b.date
AND a.time = b.opentime
GROUP BY a.symbol, a.date
這會爲每個符號和日期提取開始記錄(最低時間記錄)。
現在,在我看來,您的關閉記錄是具有時間戳1730的記錄或具有小於1730的時間戳的最新記錄。這是從快速的SQL轉變爲真正的工作,但這些是財務記錄和麥道夫在監獄裏,所以我們就這樣做吧。以下是每個日期的每個符號的結束時間。
SELECT symbol,
date,
MAX(time) AS closetime
FROM a2a
WHERE time <= 1730
GROUP BY symbol, date
現在我們需要每個日期的每個符號的收盤價。我們將以與檢索開盤價格相同的方式來檢索。
SELECT a.symbol,
a.date,
AVG (a.close) AS dailyclose
FROM a2a a
JOIN (
SELECT symbol,
date,
MAX(time) AS closetime
FROM a2a
WHERE time <= 1730
GROUP BY symbol, date
) AS b ON a.symbol = b.symbol
AND a.date = b.date
AND a.time = b.closetime
GROUP BY a.symbol, a.date
下一步是將這三個彙總查詢連接在一起,並限制您處理的日期範圍。
SELECT d.symbol, d.date, d.dailyhigh, d.dailylow, d.dailyvolume,
o.dailyopen,
c.dailyclose
FROM (
/* the first summary query, daily high low volume */
) AS d
JOIN (
/* the second summary query, daily open */
) AS o ON d.symbol = o.symbol AND d.date = o.date
JOIN (
/* the third summary query, daily close */
) AS c ON d.symbol = c.symbol AND d.date = c.date
WHERE d.date >= DATE_FORMAT(NOW() - INTERVAL 3 DAY, '%Y%m%d')
AND d.date < DATE_FORMAT(NOW(), '%Y%m%d')
ORDER BY d.symbol, d.date
這會給你三天的價值數據,以昨天結束。你必須剪切和粘貼你的三個摘要查詢到這個大胖連接。我很希望你會這樣做,因爲格式化深度嵌套的查詢並不是很有趣。
這並不簡單,但它對您的業務規則來說非常穩健和明確。
請給我們描述你的a2a表,包括'date'和'time'列的數據類型。 –