我想获得每个 4 的最新日期symbolid
。我在这里修改了代码如下:
set @num := 0, @symbolid := '';
select symbolid, date,
@num := if(@symbolid = symbolid, @num + 1, 1) as row_number,
@symbolid := symbolid as dummy
from projections
group by symbolid, date desc
having row_number < 5
并得到以下结果:
symbolid date row_number dummy
1 '2011-09-01 00:00:00' 1 1
1 '2011-08-31 00:00:00' 3 1
1 '2011-08-30 00:00:00' 5 1
2 '2011-09-01 00:00:00' 1 2
2 '2011-08-31 00:00:00' 3 2
2 '2011-08-30 00:00:00' 5 2
3 '2011-09-01 00:00:00' 1 3
3 '2011-08-31 00:00:00' 3 3
3 '2011-08-30 00:00:00' 5 3
4 '2011-09-01 00:00:00' 1 4
...
显而易见的问题是,为什么我每次只得到 3 行symbolid
,为什么它们的编号是 1、3、5?一些细节:
- 我尝试了强制索引而不是强制索引(如此处所示),并且两种方式都得到了相同的结果。
- 日期是正确的,即列表正确显示了前 3 个日期
symbolid
,但 row_number 值关闭 - 当我不使用“有”语句时,行号是正确的,即最近的日期是 1,下一个最近的日期是 2,等等
显然row_number
计算字段受到“有”子句的影响,但我不知道如何修复它。
我意识到我可以将“拥有”更改为“拥有 row_number < 7”(6 与 5 相同),但它非常难看,我想知道如何让它“表现”。