Я ищу решение для следующего случая. Предположим, приведена следующая структура с данными:
CREATE TABLE IF NOT EXISTS `customer_prices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`customer` int(11) unsigned NOT NULL,
`price` decimal(8,2) unsigned DEFAULT NULL,
`date` date NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY (`id`),
UNIQUE KEY `item_id_period` (`customer`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
INSERT INTO `customer_prices` (`id`, `customer`, `price`, `date`) VALUES
(131739296, 1, 12.56, '2018-01-01'),
(131739297, 1, 18.33, '2018-01-02'),
(131739301, 1, 15.66, '2018-01-03'),
(131739302, 1, 35.40, '2018-01-04'),
(131739303, 1, 16.96, '2018-01-05'),
(131739304, 1, 11.90, '2018-01-06'),
(131739305, 1, 17.31, '2018-01-07'),
(131739306, 1, 15.75, '2018-01-08');
Выполнение следующего запроса
SELECT
AVG(price) + AVG(price) / 100 * 10 AS maxprice,
AVG(price) - AVG(price) / 100 * 10 AS minprice,
GROUP_CONCAT(price)
FROM customer_prices
WHERE date > '2018-01-01' AND date < '2018-01-07'
выдаст список цен
18.33, 15.66, 35.40, 16.96, 11.90
То, что я хочу, - это ограничить эти прейскурантные цены всеми между minprice и maxprice.
Я пытался сделать так, но выдает ошибку.
SELECT
GROUP_CONCAT(price)
FROM customer_prices
WHERE date > '2018-01-01' AND date < '2018-01-07'
AND price > (AVG(price) - AVG(price) / 100 * 10)
AND price < (AVG(price) + AVG(price) / 100 * 10)
Есть ли какое-то решение для этого? Спасибо!