跟大家分享一下MYSQL 語法 群組最新一筆資料如何取

跟大家分享一下MYSQL 語法 群組最新一筆資料如何取
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
於多筆重複資料中取得該重複群組中最新一筆資料
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
mySQL group by 默認取分組結果的第一條記錄
#有錯資料都是撈第1筆
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype` DESC ) AS a GROUP BY `datatype`
#修正為-沒用
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype`,`sno` DESC ) AS a GROUP BY `datatype`
#撈出資料還是不對,撈的事最日期最前的一筆oc_money_price
SELECT * FROM (SELECT * FROM `oc_money_price` ORDER BY `sno` DESC) `oc_money_price` GROUP BY datatype ORDER BY sno DESC 沒用-還是第1筆
#重新整理思緒
先搞到最大各類最大SNO號
select max(sno) as max_sno from oc_money_price group by datatype #這是對的
select `sell_price`,max(sno) as max_sno from oc_money_price group by datatype #但配對sell_price會錯
max_sno
5074
5068
5071
5076
——————————————-
#整理如下
select f.* from( select max(sno) as max_sno from oc_money_price group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#但由於1家公司會有2種幣值所以要限制條件
select f.* from( select max(sno) as max_sno from oc_money_price WHERE `money_en` =’ETH’ group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#註 這時候 ORDER BY f.datatype ASC 有沒有這個條件都不會提升速度
———————————————–
#員工最大產值的例子
———————————————–
pid:員工代碼
pyear:年度
pvalue:年度產值
 
SELECT a.pid,a.pyear,MAX(a.pvalue)
FROM mytable a JOIN
(SELECT pid, pvalue = MAX(pvalue)
FROM mytable GROUP BY pid) AS b ON
a.pid= b.pid AND a.pvalue= b.pvalue
GROUP BY a.pid,a.pyear
———————————————-

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *