大数据SQL题29 求出商品连续售卖的时间区间

原题链接:http://practice.atguigu.cn/#/question/29/desc?qType=SQL

题目需求

从订单详情表(order_detail)中,求出商品连续售卖的时间区间

期望结果如下(截取部分):

sku_id(商品id)start_date(起始时间)end_date(结束时间)
12021-09-272021-09-27
12021-09-302021-10-01
12021-10-032021-10-08
102021-10-022021-10-03
102021-10-052021-10-08
112021-10-022021-10-08
122021-09-302021-09-30
122021-10-022021-10-06
122021-10-082021-10-08

需要用到的表:

订单明细表:order_detail

order_detail_id(订单明细id)order_id(订单id)sku_id(商品id)create_date(下单日期)price(商品单价)sku_num(商品件数)
1112021-09-302000.002
2132021-09-305000.005
221042020-10-026000.001
231052020-10-02500.0024
241062020-10-022000.005

解题思路

本题与第15题类似,首先通过row_number()获取某日期在商品所有售卖日期中的排序值rn,随后通过date_sub(create_date,rn) 进行分组(若为连续日期,则date_sub(create_date,rn)相同),分组内日期则为连续登录日期

SELECT  sku_id,
        MIN(create_date) AS start_date,
        MAX(create_date) AS end_date
FROM
(
	SELECT  sku_id,
	        create_date,
	        ROW_NUMBER() OVER (PARTITION BY sku_id ORDER BY  create_date) AS rn
	FROM
	(
		SELECT  sku_id,
		        create_date
		FROM order_detail
		GROUP BY  sku_id,
		          create_date
	) t1
) t2
GROUP BY  sku_id,
          date_sub(create_date,rn)
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值