假设我有一个包含" type“和"date”列的表,我想获取每种类型的最新3项,按日期排序。(不能相信自然表的顺序或插入顺序)。查询不需要计算"type“列的所有不同值,这些值可以在查询中指定。
我尝试使用变量,如下所示:
set @c=0;
set @d=0;
select *, @c:=IF(type = 1, @c+1,@c), @d:=IF(type = 2, @d+1,@d) from testtable HAVING((type=1 AND @c < 3) OR (type=2 AND @d<3)) order by testdate;这是“几乎”的工作,(它为每个类型多返回一个条目,这很好),我猜这与mysql解析HAVING子句的方式有关(实际上,在某些情况下,我发现我需要使用WHERE而不是HAVING).Can有人对此有所了解吗?我这样使用它安全吗?
发布于 2010-12-14 13:20:08
好的,看起来使用HAVING是很好的……我遇到了一些问题,因为在我的实际代码中,我需要使用一些order-by,最后一个是RAND() (用来解决平局),而RAND()排序似乎与mysql变量赋值搞得一团糟。
https://stackoverflow.com/questions/4435946
复制相似问题