[英]MySQL query not retrieving distinct values
上下文:我正在從 MySQL 數據庫中檢索股票數據(例如日期、開盤價、最低價、收盤價和最高價),並且我在表上有一些重復數據。 為了避免這種情況,我嘗試在查詢中使用DISTINCT
,但是,我一直在Date
上收到一些重復項。 我相信這是因為雖然有些Date
是相同的,但開盤價、最高價、最低價和收盤價卻不同,因此無論如何我都會得到重復的日期。
我嘗試使用UNION
來獲取不同的日期,然后在我的查詢中使用 2nd select 來選擇開盤價、最高價、最低價和收盤價,但沒有成功:
(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)
如您所見,日期相同,但價格不同(這與我正在做的網絡抓取有關,它可能會不時出現故障並檢索同一日期的價格,但在不同時期那天)。
這是我原來的 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 還很陌生)
我猜您想合並您擁有的任何重復記錄。 您可以使用此 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
不像你想象的那樣工作。它連接兩個結果集。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.