mysql min() 求某条件下最小的值出现多个结果

mysql min( ) 求最小值时 加的条件不生效
求 一张表内 项目 a 时间最小值 项目 B 时间最小值

SELECT `ID` , `项目` ,`昵称` , `时间` , `项目` ,  `UID` FROM `Probs` WHERE `时间` = ( SELECT MIN(`时间`) FROM `Probs` WHERE `项目` like '%无相之水%' and day(参与时间)=day(now())  )

img

求 项目 为 无相之水 中 最小时间的值 出现2个

因为项目 A 时间是 20.9 项目B 时间也是 20.9
但是 我加了 项目 like '%无相之水%' 不知道为什么还出现2个

求解答

因为你最外层条件是按时间条件查询的,你要把like放到外面就行了


SELECT `ID` , `项目` ,`昵称` , `时间` , `项目` ,  `UID` FROM `Probs` 
WHERE `时间` = 
( SELECT MIN(`时间`) FROM `Probs` WHERE `项目` like '%无相之水%' and day(参与时间)=day(now())  )
 and  `项目` like '%无相之水%'
 

你下面的提问


select * from ( select * from `Probs` order by `时间` asc ) s group by `项目`

在你sql的基础上改一下,像下面这样

SELECT `ID` , `项目` ,`昵称` , `时间` , `项目` ,  `UID` FROM `Probs` 
WHERE `时间` = 
( SELECT MIN(`时间`) FROM `Probs` WHERE `项目` like '%无相之水%' and day(参与时间)=day(now())  )
 and  `项目` like '%无相之水%' 

或者

SELECT `ID` , `项目` ,`昵称` , `时间` , `项目` ,  `UID` FROM `Probs` a 
WHERE `时间` =
 ( SELECT MIN(`时间`) FROM `Probs` b WHERE 
a.项目=b.项目 and  `项目` like '%无相之水%' and day(参与时间)=day(now())  ) 

img


查询 一个表下 不同项目 最小值

在外层添加一个判断条件:

SELECT `ID` , `项目` ,`昵称` , `时间` , `项目` ,  `UID` FROM `Probs` 
WHERE `时间` = 
( SELECT MIN(`时间`) FROM `Probs` WHERE `项目` like '%无相之水%' and day(参与时间)=day(now())  )
 and  `项目` like '%无相之水%'

select t.*, min(t.时间) from 表名 t group by t.项目

SELECT ID , 项目 ,昵称 , 时间 , 项目 , UID
FROM Probs
WHERE 时间 = ( SELECT MIN(时间) FROM Probs WHERE 项目 like '%无相之水%' and day(参与时间)=day(now()) )
and 项目 like '%无相之水%'
and day(参与时间)=day(now())