用于date_add()计算可能的三个月期间的开始和结束。加入他们,以便sale_date在期间。然后按项目 ID、期间的开始和结束进行分组。按降序排列结果,count(*)将最畅销的商品排在最前面。用于LIMIT 1仅获取第一条记录。
SELECT t.item_id,
p.b,
p.e
FROM elbat t
INNER JOIN (SELECT DISTINCT
date_add(sale_date, INTERVAL -day(sale_date) + 1 DAY) b,
date_add(date_add(sale_date, INTERVAL -day(sale_date) + 1 DAY), INTERVAL 3 MONTH) e
FROM elbat
UNION
SELECT DISTINCT
date_add(date_add(sale_date, INTERVAL -day(sale_date) + 1 DAY), INTERVAL -3 MONTH) b,
date_add(sale_date, INTERVAL -day(sale_date) + 1 DAY) e
FROM elbat) p
ON p.b <= t.sale_date
AND p.e > t.sale_date
GROUP BY t.item_id,
p.b,
p.e
ORDER BY count(*) DESC;
SQL小提琴
您可能需要一些额外的标准,ORDER BY因为最畅销的商品可能有多个时期(因为时期重叠,当然因为可能存在以相同数量出售的商品)。现在,任何一行的最高销售额都在上面。