修改成月份的了。
SELECT DATE_FORMAT(T.5A,'%Y-%m') 月份,MAX(T.2A) 最大值,MIN(T.2A) 最小值 FROM 001copy T WHERE T.5A >= ? AND T.5A <= ? GROUP BY DATE_FORMAT(T.5A,'%Y-%m') ;
uj5u.com熱心網友回復:
SELECT T.5A 日期,MAX(T.2A) 最大值,MIN(T.2A) 最小值 FROM 001copy T WHERE T.5A >= ? AND T.5A <= ? GROUP BY T.5A ;
修改成月份的了。
SELECT DATE_FORMAT(T.5A,'%Y-%m') 月份,MAX(T.2A) 最大值,MIN(T.2A) 最小值 FROM 001copy T WHERE T.5A >= ? AND T.5A <= ? GROUP BY DATE_FORMAT(T.5A,'%Y-%m') ;
按照您的要求,直接執行這個陳述句即可。
SELECT @id:=@id+1 id,t.2A,t.2A_1,t.5A FROM (SELECT MAX(T.2A) `2A`,MIN(T.2A) `2A_1`,DATE_FORMAT(T.5A,'%Y-%m') `5A`, @id:=0 FROM 001copy T WHERE T.5A >= ? AND T.5A <= ? GROUP BY DATE_FORMAT(T.5A,'%Y-%m')) t ;
uj5u.com熱心網友回復:
表001copy有10年內120個月的資料,主鍵id,2A是資料,5A是日期,如下圖
現在想得到每個月的最大值和最小值,如下圖
現在用的方法是這個,只能一個月一個月地去做,有沒有辦法,一次性把120個月每個月的最大值和最小值一起篩選出來,同時保留2A對應的5A
SELECT * FROM `001copy` WHERE `2A` = (SELECT MAX(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=04 )
or `2A` = (SELECT MIN(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=04);
如果2A同時取最大值和最小值不方便,也可以將2A復制到2A_1,一個篩選最大值一個篩選最小值,只要保住資料和資料對應的日期能同時篩選出來。
uj5u.com熱心網友回復:
如果同一個月的最大值,有多個日期,應該如何顯示。
uj5u.com熱心網友回復:
SELECT DATE_FORMAT(T.5A,'%Y-%m') 月份,MAX(T.2A) 最大值,MIN(T.2A) 最小值 FROM 001copy T WHERE T.5A >= ? AND T.5A <= ? GROUP BY DATE_FORMAT(T.5A,'%Y-%m')
謝謝諸位的幫忙和提示,用了兩個方案,都不完美,第一個是非常笨的方法。
(SELECT * FROM `001copy` WHERE
`2A` = (SELECT MAX(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=1)
or `2A` = (SELECT MIN(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=1)
or `2A` = (SELECT MAX(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=2)
or `2A` = (SELECT MIN(`2A`) FROM `001copy` WHERE YEAR(5A)=2019 AND MONTH(5A)=2)
……
這樣一直下去,非常的長,然后能選出自己想要的結果。
(其實結果也不完美,還是多了兩條資料,有兩個年份的某月最大值和最小值合在一起有三個,但是查看陳述句卻沒發現有多余的最大或最小值資訊,后來在查詢出來的結果中慢慢排查才解決了問題,到底是什么原因就不知道了。)
uj5u.com熱心網友回復:
如果你實在不會寫就提供測驗資料及腳本,以及想要結果的截圖,這樣方便大家更好的幫你。
uj5u.com熱心網友回復:
如果是純粹的sql陳述句:
事實上不建議這么做。
select xx資料,日期函式(這條資料的日期 轉換成月份) from 這個表 where ???
有點像
1 201801
2 201801
3 。。。。
select from (select xx資料,日期函式(這條資料的日期 轉換成月份) 日期 from 這個表 where ???)
group by 日期
uj5u.com熱心網友回復:
另外一種方法有瑕疵。兩張表一模一樣,001copy和001_copy1,將欄位名改成不同名稱。這里以最大值舉例。
SELECT AA.2A,BB._5A,BB._id FROM (SELECT MAX(T.2A) `2A` FROM 001copy T
WHERE T.5A BETWEEN '2018-01-01' AND '2018-12-31' GROUP BY DATE_FORMAT(T.5A,'%Y-%m') DESC ) AA
JOIN 001_copy1 BB ON AA.2A=BB._2A;
先將001copy中的2A欄位中最大值查詢出來,再放入001_copy中,因為兩個表內容一樣,所以得出001_copy的_id和_5A,
最大的弊端就是如果2A欄位中資料重復就麻煩了。得出的結果就不夠準了。
方法已經找到,謝謝眾位的幫忙。
將max和min查詢的結果作為一張表,放到from陳述句的后面
SELECT T.id,T.2A,T.5A FROM 001copy T,(SELECT MAX(T.2A) AS 2A,MIN(T.2A) AS 21A
FROM 001copy T
WHERE T.5A BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY DATE_FORMAT(T.5A,'%Y-%m')) AS M WHERE T.2A=M.2A OR T.2A=M.21A ;
具體邏輯是什么。我也說不清,但是的確解決了問題,我一一核對了一下,沒有問題。
如果有大神不嫌棄,可以幫我們普及一下原理。謝謝。
uj5u.com熱心網友回復:
方法已經找到,謝謝眾位的幫忙。
將max和min查詢的結果作為一張表,放到from陳述句的后面
SELECT T.id,T.2A,T.5A FROM 001copy T,(SELECT MAX(T.2A) AS 2A,MIN(T.2A) AS 21A
FROM 001copy T
WHERE T.5A BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY DATE_FORMAT(T.5A,'%Y-%m')) AS M WHERE T.2A=M.2A OR T.2A=M.21A ;
具體邏輯是什么。我也說不清,但是的確解決了問題,我一一核對了一下,沒有問題。
如果有大神不嫌棄,可以幫我們普及一下原理。謝謝。
你這個正確只是結果表面上的正確,如果 WHERE T.2A=M.2A OR T.2A=M.21A 這個條件查出來有多條資料(即有資料相同的情況),你這個就是錯誤的。
uj5u.com熱心網友回復:
方法已經找到,謝謝眾位的幫忙。
將max和min查詢的結果作為一張表,放到from陳述句的后面
SELECT T.id,T.2A,T.5A FROM 001copy T,(SELECT MAX(T.2A) AS 2A,MIN(T.2A) AS 21A
FROM 001copy T
WHERE T.5A BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY DATE_FORMAT(T.5A,'%Y-%m')) AS M WHERE T.2A=M.2A OR T.2A=M.21A ;
具體邏輯是什么。我也說不清,但是的確解決了問題,我一一核對了一下,沒有問題。
如果有大神不嫌棄,可以幫我們普及一下原理。謝謝。
你這個正確只是結果表面上的正確,如果 WHERE T.2A=M.2A OR T.2A=M.21A 這個條件查出來有多條資料(即有資料相同的情況),你這個就是錯誤的。
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......