背景關系:我正在從 MySQL 資料庫中檢索股票資料(例如日期、開盤價、最低價、收盤價和最高價),并且我在表上有一些重復資料。為了避免這種情況,我試圖DISTINCT在我的查詢中使用 ,但是,我不斷在Date. 我相信這是因為雖然其中一些Date是相同的,但開盤價、最高價、最低價和收盤價卻不同,因此無論如何我都會得到重復的日期。
我嘗試使用UNION來獲取不同的日期,然后在我的查詢中使用第二個選擇來選擇開盤價、最高價、最低價和收盤價,但沒有成功:
(SELECT DISTINCT DATE)
UNION
(SELECT Open, High, Low, Close
FROM symbolsv2
WHERE ticker='AAPL'
AND `intval`='1d'
AND Open
AND High
AND Low
AND Close IS NOT NULL
ORDER BY DATE)
這就是我在 MySQL 上的一些資料發生的情況:

如您所見,日期相同,但價格不同(這與我正在做的網路抓取有關,它可能會不時出現故障并檢索同一日期的價格,但在不同時期那天)。
這是我原來的 SQL 查詢:
if (isset($_POST['submit'])) {
$ticker = $_POST['ticker'];
$intval = $_POST['intval'];
$Date = $_POST['date'];
$stmt = $conn->prepare("SELECT DISTINCT Date, Open, High, Low, Close
FROM symbolsv2
WHERE ticker=?
AND `intval`=?
AND Date>=?
AND Date
AND Open
AND High
AND Low
AND Close IS NOT NULL
ORDER BY Date");
$stmt->bind_param("sss", $ticker, $intval, $Date);
$stmt->execute();
$result = $stmt->get_result();
while ($data = $result->fetch_assoc()) {
$data_array[] = $data;
}
$stmt->close();
}
$conn->close();
?>
我怎么能這樣做,這樣我就不再有這個重復的了Date?例如,我不保留第 1 條記錄(例如,保留第 76 個索引并洗掉第 77 個索引)。
我發現了這個 SO - SQL: Two select statements in one query,但我無法讓它作業
在此先感謝您,歡迎提供任何幫助(我對 SQL 還很陌生)
uj5u.com熱心網友回復:
我猜您想合并您擁有的任何重復記錄。您可以使用此 GROUP BY 查詢。
SELECT Date, ticker, intval,
AVG(Open) AS Open,
MAX(High) AS High,
MIN(Low) AS Low,
AVG(Close) AS Close
FROM symbolsv2
WHERE ticker=?
AND `intval`=?
AND Date >= ?
GROUP BY Date, ticker, intval;
這將為 Date、ticker 和 intval 的每個不同組合生成一行。它通過平均多個開盤價和收盤價并取最高價和最低價中的最高價來處理可能具有不同資料的重復行。(當然,您想如何處理這些具有不同值的重復項取決于您。我只是猜測。)
(UNION不像你認為的那樣作業。它連接了兩個結果集。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/346472.html
