Я хотел получить последние 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 отключено - Когда я не использую оператор «has»,номера строк правильные, т. е. самая последняя дата равна 1, следующая самая последняя - 2 и т. д.
Очевидно, что на вычисляемое поле row_number
влияет предложение «has», ноЯ не знаю, как это исправить.
Я понимаю, что я мог бы просто изменить «иметь» на «иметь row_number <7» (6 дает то же, что 5), но это очень уродливо и хотелось бызнать, что нужно сделать, чтобы заставить его «вести себя». </p>