2010-05-18 2 views
0

Ссылаясь на SO и другие sites, я привел примеры использования MySQL для создания запроса «наибольшая n-на-группу».MySQL - подсчет строк при подготовке к работе с наибольшим количеством n-групп не работает?

Моим вариантом в этом случае будет запрос, который возвращает первые 3 строки каждой категории. В качестве основы для этого мне нужно сортировать свои данные в удобной последовательности, и именно там начинаются мои проблемы. Выполнение только запроса последовательности с нумерацией строк показывает, что изменения в категории в основном игнорируются. Я должен иметь 35 категорий, возвращающих строки, но только 5 делают это.

Мой запрос:

set @c:=0; 
set @a:=0; 
SELECT IF(@c = tdg, @a:[email protected]+1, @a:=1) AS rownum, (@c:=tdg) , 
julian_day, sequence, complete, year, tdg 
FROM tsd WHERE complete = 0 
order by tdg, year, julian_day, sequence 

У меня есть синтаксической ошибки с этим запросом?

+0

Как я должен угадать, а не знать, я использую поле комментариев: проблема может заключаться в том, что ваш IF() предполагает, что все строки, которые имеют общее значение в tdg, должны быть последовательно в таблице (то есть другие строки в -между). ЗАКАЗ не выполняется до выполнения SELECT, но после того, как все строки извлечены -> @a получает сброс. Кроме того, на странице справки вам нужен фиктивный столбец, поэтому внимательно прочитайте эти страницы. – Makis

+0

@Makis - Я думаю, что вы на правильном пути - у меня не было времени тщательно проверить ваше предложение, но это имеет смысл - бросьте свой комментарий в качестве ответа, и я буду отмечать его как правильное. –

ответ

1

ОК, вот мой комментарий в ответ:

Проблема может быть, что ваш IF() предполагает, что все строки, которые имеют общее значение TDG должно быть последовательно в таблице (т.е. никакие другие строки не- между). ЗАКАЗ не выполняется до выполнения SELECT, но после того, как все строки извлечены -> @a получает сброс. Кроме того, на странице справки вам нужен фиктивный столбец, поэтому внимательно прочитайте эти страницы.