https://www.cnblogs.com/Objecting/p/13903607.html
之前寫過一種方法,現在這個方法感覺更好一點
需求:取出表里最新時間的一條數據
現在有一種新的思路,
是用的開窗函數(mysql8.0),先把相同的數據進行分組,並且按照時間倒序,這樣會有一個名次,然后再用名次等於 1 的當做條件
SELECT * FROM ( SELECT t.name, t.des, t.`value`, rank() over ( PARTITION BY t.`name` ORDER BY t.date DESC ) mm FROM t_base t ) temp WHERE temp.mm = 1
還有另一種思路
mysql 5.7
以上是下面代碼查詢出來的數據,自己調用自己,每次執行到where條件是,都會用到a 表,然后出去找a表的條件
#mysql 5.7
any_value() 這個函數是讓數據庫回歸到mysql5.7不然會報一個分組的錯誤,網上說可以配置數據庫修改這個問題,但實際上是sql不規范的問題
SELECT any_value(a.`name`) code, any_value(a.des) name, any_value(`value`) value FROM t_base AS a WHERE date =( SELECT max( date ) FROM t_base AS b WHERE a.`name` = b.`name` ) GROUP BY `name`