В приведенной ниже процедуре
Он выдает ошибку ([Err] 1111 — Недопустимое использование групповой функции), когда я использую операторы WHERE, и выдает другую ошибку ([Err] 1054 — Неизвестный столбец «roomid» в «имеющем предложении»), когда я использую операторы HAVING вместо WHERE. , хотя у меня есть столбец roomid, определенный в таблице.
Есть ли у кого-нибудь идеи о том, как я могу решить эту проблему? Код работал отлично, когда я пытался использовать другую версию mySQL, я думаю.
DELIMITER //
DROP PROCEDURE IF EXISTS `findAVG`//
CREATE DEFINER=`kamer`@`%` PROCEDURE `findAVG`(IN rid INT, startDate DATETIME, OUT Score DOUBLE)
BEGIN
DECLARE finishDate DATETIME;
DECLARE DateIterator DATETIME;
DECLARE avgPrice DOUBLE;
SET avgPrice = 0;
SET Score = 0;
SELECT price into Score
FROM bookings
WHERE roomid = rid
ORDER BY ABS( DATEDIFF( bookings.date, startDate)) LIMIT 1;
IF (Score = 0) THEN
SET DateIterator = startDate;
SET finishDATE = DATE_ADD(startDate, INTERVAL 30 DAY);
WHILE DateIterator <= finishDate DO
SELECT price
INTO avgPrice
FROM prices
WHERE roomid = rid
AND date = DateIterator
ORDER BY DATEDIFF(startDate, prices.timestamp) LIMIT 1;
SET DateIterator = DATE_ADD(DateIterator, INTERVAL 1 DAY);
END WHILE;
SET Score = AVG(avgPrice);
END IF;
UPDATE bookings SET price=Score WHERE roomid= rid AND date=startDate;
END
AVG(avgPrice)
? - person Rowland Shaw   schedule 29.12.2013