[英]Min value from Database in MySQL
我試圖找到過去 30 天的最小值,在我的表中每天有一個條目,我正在使用這個查詢
SELECT MIN(low), date, low
FROM historical_data
WHERE name = 'bitcoin'
ORDER BY STR_TO_DATE(date,'%d-%m-%Y') DESC
LIMIT 7
但是這個值沒有返回正確的值。 我的表的結構是
存儲的表數據是這樣的
現在我需要的是獲得最小的低值。 但是我的查詢不起作用它給了我錯誤的值,甚至在表中也不存在。
更新:
這是我更新的表結構。 在此處輸入圖片說明
這是我在這張表中的數據,看起來像這樣在此處輸入圖像描述
現在,如果你看一下數據,我想檢查令牌的名稱omisego
和混帳從過去7天的低價值,這將是自2017-12-25
至2017-12-19
,並在這個轉換的低值9.67
,但我當前的查詢和我的某個成員建議的查詢沒有帶來正確的答案。
更新 2:
http://rextester.com/TDBSV28042
在這里,基本上我有超過1400
coins
和token
歷史數據,這意味着我將有超過 1400 個條目與2017-12-25
相同的日期但名稱不同,我總共有超過650000
條記錄。 所以每個日期都有許多不同名稱的條目。
要獲得每組最低的行,您可以使用以下內容
SELECT a.*
FROM historical_data a
LEFT JOIN historical_data b ON a.name = b.name
AND a.low > b.low
WHERE b.name IS NULL
AND DATE(a.date) >= '2017-12-19' AND DATE(a.date) <= '2017-12-25'
AND a.name = 'omisego'
或者
SELECT a.*
FROM historical_data a
JOIN (
SELECT name,MIN(low) low
FROM historical_data
GROUP BY name
) b USING(name,low)
WHERE DATE(a.date) >= '2017-12-19' AND DATE(a.date) <= '2017-12-25'
AND a.name = 'omisego'
對於 7 天或 n 天的最后 30 天,您可以將上述查詢寫為
SELECT a.*, DATE(a.`date`)
FROM historical_data2 a
LEFT JOIN historical_data2 b ON a.name = b.name
AND DATE(b.`date`) >= CURRENT_DATE() - INTERVAL 30 DAY
AND DATE(b.`date`) <= CURRENT_DATE()
AND a.low > b.low
WHERE b.name IS NULL
AND a.name = 'omisego'
AND DATE(a.`date`) >= CURRENT_DATE() - INTERVAL 30 DAY
AND DATE(a.`date`) <= CURRENT_DATE()
;
但請注意,它可能會返回多個低值相同的記錄,要在其中選擇 1 行,您必須在不同的屬性上指定另一個條件
考慮將相同的分組並運行子句
SELECT name, date, MIN(low)
FROM historical_data
GROUP BY name
HAVING name = 'bitcoin'
AND STR_TO_DATE(date, '%M %d,%Y') > DATE_SUB(NOW(), INTERVAL 30 DAY);
鑒於結構,上面的查詢應該會得到你的結果。
// 試試這個代碼 ..
SELECT MIN(`date`) AS date1,low
FROM historical_data
WHERE `date` BETWEEN now() - interval 1 month
AND now() ORDER by low ASC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.