gpt4 book ai didi

mysql - SQL 选择数据并按日期范围对数据进行分组

转载 作者:行者123 更新时间:2023-12-04 03:37:36 27 4
gpt4 key购买 nike

我有这样的数据表

<表类="s-表"><头>价格<日>日期 类型<正文>10002021-03-13一个10002021-03-14一个10002021-03-15一个13002021-03-16一个10002021-03-17一个13002021-03-18一个10002021-03-19一个15002021-03-20一个15002021-03-21一个15002021-03-22一个20002021-03-13B20002021-03-14B20002021-03-15B20002021-03-16B20002021-03-17B

我想这样查询数据

<表类="s-表"><头>价格开始日期结束日期类型<正文>10002021-03-132021-03-15一个13002021-03-162021-03-16一个10002021-03-172021-03-17一个13002021-03-182021-03-18一个10002021-03-192021-03-19一个15002021-03-202021-03-22一个20002021-03-132021-03-17B

下面是我当前的 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;

screen capture from demo link below

Demo

关于mysql - SQL 选择数据并按日期范围对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66595810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com