У меня сложный запрос, который требует ранга в нем. Я узнал, что стандартный способ сделать это - использовать технику, представленную на этой странице: http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/. Я использую Infobright в качестве серверной части, и она работает не совсем так, как ожидалось. То есть, хотя стандартный движок MySQL будет показывать ранг как 1, 2, 3, 4 и т. Д. Brighthouse (движок Infobright) будет возвращать 1, 1, 1, 1 и т. Д. Итак, я придумал стратегия установки переменной, функции, а затем выполнить ее в запросе. Вот подтверждение концепции запроса, который делает именно это:
SET @rank = 0;
DROP FUNCTION IF EXISTS __GetRank;
DELIMITER $$
CREATE FUNCTION __GetRank() RETURNS INT
BEGIN
SET @rank = @rank + 1;
return @rank;
END$$
DELIMITER ;
select __GetRank() AS rank, id from accounts;
Затем я скопировал и вставил функцию в iReport Jasper Report, а затем скомпилировал свой отчет. После его выполнения я получаю синтаксические ошибки. Поэтому я подумал, что, возможно,; скинул это. Поэтому в верхней части запроса я добавляю DELIMITER; Это тоже не сработало.
Возможно ли то, что я хочу сделать? Если так, то как? И если есть Infobright способ получить звание без написания функции, я тоже буду к этому открыт.