mysql根據某一字段獲取最新一條資料的幾種實現

2021-10-19 22:54:21 字數 1993 閱讀 1530

具體事例

由於使用的表的資料較多,所以只展示了部分資料

第一種

如上述sql,若想獲取其他欄位的資料,而直接在sql語句上增加該欄位的話,查詢到的結果是不一致的(product_price 最大的那條資料對應的id應該是25,而查詢出來的id是21(預設顯示分組後的第一條資料的值)),需注意。由於能力有限,具體原因並不知道。若有大佬知道,希望能給出答案。

第二種

因為在mysql5.7的時候,子查詢的排序已經變為無效了,可能是因為子查詢大多數是作為乙個結果給主查詢使用,所以子查詢不需要排序的原因。

所以,對子查詢的排序進行limit限制,此時子查詢就不光是排序,此時排序會生效,但是限制條數卻只能盡可能的設定大些。

序號函式:row_number()、rank()、dense_rank()

select

a.id,

a.order_id,

a.product_price

from

(select order_id, row_number (

)over

(partition

by order_id order

by product_price desc

)as price_order,product_price from t_score ) a

頭尾函式:first_value(expr)、last_value(expr)

select

id,order_id,

product_price,

first_value ( product_price )

over w as first_price,

last_value ( product_price )

over w as last_price

from

oms_order_item

window w as

(partition

by order_id order

by product_price )

由於mysql版本過低(8.0及以上才可使用視窗函式),無法使用。只是將用法記錄一下。

MySQL對某一字段去重

mysql有乙個去重關鍵字distinct,但是如果查詢的字段有很多,而想要去重的字段只是其中的某乙個,那麼僅僅用distinct是完成不了的,distince只能做到你查詢的那些欄位都是重複時才會去重。比如有一張使用者表的資料是這樣的 這裡我們本意是想查出一條資料,如果是這樣寫sql語句 sele...

排序之根據某一字段的應用排序實現

ds裡介紹了各種狂拽酷炫的排序演算法,但是都是基於單個元素,實際應用中對某條記錄的某個欄位來排序的情況層出不窮,如果還是原來的演算法直接用的話,恐怕無濟於事,於是我想怎麼根據某個欄位來排序,當時學c 的時候qsort,一直都用這個排序,有個compare函式比較糾結,裡面指標多,這個是排序的依據,在...

根據某一字段值相同合併字串 SQL

根據某一字段值相同合併字串 sql 做專案的過程中,遇到乙個問題,相同id,不同value的記錄希望合併成一條記錄,value以逗號分隔,從網上搜了搜解決方案,整理如下,備忘。一 字串合併 表名 test 字段 id int name nvarchar 50 字段值 期望結果 id namestr ...