mysql时间段拆分_SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)...

将平时涉及到的sql 有关时间处理的查询整理一下:

场景1:时间段筛选,时间段取交集

商家将商品放到不同的销售平台上进行销售,A商品参与了A平台某个时段的活动(减价时段),需要进行减价销售,

同时A商品此时可能也参与了B平台的活动,B平台要求该商品参与活动期间在所有平台中是价格最低(保价价格、保价时段),

所以现在要对A商品在A平台某一时段进行减价时需要考虑到是否有参与了B平台的活动

要求:查出该商品在减价时段期间是否参与了其他平台活动,若有则查出该商品在其他平台的保价价格,保价时段

思路:

查出减价时段是否存在保价时段(即存两个时段存在交集),若有交集则列出保价价格。保价时段

那么有交集是哪几种情况呢?

如图:如果存在以下四种情况之一,则需要查出保价价格

e06896c2bf5f386617690466255bd818.png

1.① ② 两种情况都是减价时段与保价时段有一部分交集

2.第三种情况③则是减价时段完全在保价时段内

3.第四种情况则是减价时段包含了保价时段

那么我们现在应该如何用最短的sql语句查出所有有交集的情况呢?

如下:

Select * from table where cut_from between protect_form and protect_to ORcut_frombetween protect_form and protect_to ORprotect_frombetween cut_from and cut_to

场景二  时间段合并

同一商品可能在不同平台设置了不同的保价时间段且价格相同存入了数据库,现在需要合并为一条记录查询出来

如图所示,商品item为100且价格为60有多条保价记录,现要求将相同价格的同一商品的多条保价记录根据时间合并为一条记录(时间有交集则合并)

ccea8b93ff51186d90886cad34e0fcc8.png

合并后为

11549827fa94dc4dfa14810f9c64f18c.png

sql如何去实现?

sql代码如下

SELECT X.item,X.protect_from,MIN(Y.protect_to) ASprotect_to,X.protect_priceINTO#temp01FROM(SELECTT1.item,T1.protect_from,T1.protect_priceFROMtemp_protectAST1LEFT OUTER JOINtemp_protectAS T2 ON T1. protect_from > T2. protect_from AND T1. protect_from <=T2. protect_toAND T1.protect_price =T2.protect_price AND T1.item =T2.itemGROUP BYT1. protect_from, T1.protect_price,T1.itemHAVING COUNT(T2. protect_from) = 0)ASX--除去起始时间在别的时间段内

INNER JOIN

--除去结束时间在别的时间段内

(SELECTT3.item,T3.protect_to,T3.protect_priceFROMtemp_protectAST3LEFT OUTER JOIN

temp_protect AS T4 ON T3. protect_to >= T4. protect_from AND T3. protect_to < T4. protect_to

AND T3.protect_price =T4.protect_price AND T3.item =T4.itemGROUP BY T3. protect_to,T3.protect_price,T3.item

HAVING COUNT(T4. protect_from) = 0

)ASYON X.protect_from <= Y.protect_to AND X.protect_price =Y.protect_price AND X.item =Y.item

GROUP BYX.item,X.protect_from,X.protect_priceselect * from #temp01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值