Я пытаюсь выполнить стандартное группирование данных в mysql: разбить данные по некоторой характеристике на N сегментов и назначить номер блока для каждой записи. Записи состоят из даты, permno и объема следующим образом:
dte, permno, volume, day_rank
1986-03-07, 10071, 9203, NULL
Таблица называется БАМ. На каждую дату (dte) есть много permnos (идентификаторов), которые я хотел бы ранжировать на основе объема. Затем я хотел бы назначить рейтинг для каждого permno, dte для day_rank. Таким образом, успешный запрос будет ранжировать значения permnos для каждой точки на основе объема. Я пытаюсь сделать это с помощью этого запутанного запроса:
select a.dte, a.permno, count(b.volume) as rnk
from bam a inner join bam b
on a.dte = b.dte and (a.volume < b.volume or (a.permno=b.permno and a.volume = b.volume))
order by a.dte, a.volume;
Это работает, однако это очень и очень медленно до такой степени, что для таблицы, которая имеет разумный размер, потребуется ~ 1 день для запуска.
Есть идеи?