我有这样的数据表
我想这样查询数据
下面是我当前的 sql,但它根本不正确
SELECT MIN(date) as startDate, MAX(date) as endDate, price, type
FROM prices
GROUP BY type, price
ORDER BY type, MIN(date)
最佳答案
这是一个间隙和孤岛问题,处理它的一种简单方法是使用行数差异法。假设您使用的是 MySQL 8+,以下应该有效:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY type ORDER BY date) rn1,
ROW_NUMBER() OVER (PARTITION BY type, price ORDER BY date) rn2
FROM prices
)
SELECT price, MIN(date) AS startDate, MAX(date) AS endDate, type
FROM cte
GROUP BY price, type, rn1 - rn2
ORDER BY type, startDate;
Demo
关于mysql - SQL 选择数据并按日期范围对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66595810/