mysql中是否有办法调整此查询:
bserver_thread
这样每个产品最多只出现两次?
select * from table order by date desc limit 4
应该返回的查询:
date | product | description
2015 | a | alpha
2012 | a | bravo
2014 | a | charlie
2011 | b | delta
2000 | c | echo
1999 | d | foxtrot
1972 | d | g...
而不是
2015 | a | alpha
2014 | a | charlie
2011 | b | delta
2000 | c | echo
答案 0 :(得分:1)
您可以运行如下查询:
Select thedate, product, description
From (
Select t.*
, (@r:=Case when @p=t.Product then @r+1 else 1 end) as rownumber
, (@p:=t.Product) as theProduct
From (Select * From thetable order by product, thedate desc) t,
(Select @r:=0,@p:='') r
) q
Where rownumber <= 2
(请注意,我使用thedate
作为我的列名,使用thetable
作为我的表名,以避免必须转义其名称。
Select @r:=0,@p:=''
加入查询以创建两个变量:@r用于存储行号,@ p用于存储最后一个产品。如果产品与最后一行相同,我们会增加行号,否则我们将其重置为1.
这模拟了在SQL Server中可用但不在MySQL中的分区功能的row_number()。它为每个组中的每一行分配一个数字(其中一个组是产品的行集),然后WHERE子句限制结果,以便只显示每个组的前两个行号。