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

摘要:
如图所示:如果有以下四种情况之一,您需要找出保险价格。1.① ② 在这两种情况下,降价期和投保期都有一些重叠。2.在第三种情况下,③, 降价期完全在保险期内。3.在第四种情况下,降价期包括投保期。我们现在如何用最短的SQL语句找出所有的重叠条件?

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

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

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

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

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

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

思路:

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

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

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

SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)第1张

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

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

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

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

如下:

 Select * from table where cut_from between protect_form and protect_to ORcut_from between protect_form and protect_to ORprotect_from between cut_from and cut_to

场景二时间段合并

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

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

SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)第2张

合并后为

SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)第3张

sql如何去实现?

sql代码如下

SELECT X.item,X.protect_from,MIN(Y.protect_to) ASprotect_to,X.protect_price
INTO#temp01
FROM(SELECT
T1.item,T1.protect_from,T1.protect_price
FROMtemp_protect AST1 LEFT OUTER JOINtemp_protect AS T2 ON T1. protect_from > T2. protect_from AND T1. protect_from <=T2. protect_to     AND T1.protect_price =T2.protect_price AND T1.item =T2.item GROUP BYT1. protect_from, T1.protect_price,T1.item HAVING COUNT(T2. protect_from) = 0) ASX --除去起始时间在别的时间段内 INNER JOIN --除去结束时间在别的时间段内 (SELECT
T3.item,T3.protect_to,T3.protect_price
FROM  temp_protect AST3 LEFT 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.item GROUP BY T3. protect_to,T3.protect_price,T3.item
HAVING COUNT(T4. protect_from) = 0
)ASY ON 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_price select * from #temp01

免责声明:文章转载自《SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eclipse起不起来web项目mvc+EF下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

学习使用Apollo配置中心

Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。Apollo官网地址如何安装服务端可以按照上面官网的步骤。这里主要说明一下应用如何接入apollo。...

【工具技巧】:sublime notepad++ 多行编辑

将光标定位到一行-˃ctrl+shift+↑↓, 上下移动一行。选择-˃ctrl+shift后+↑↓, 上下移动所选区域。再次按6:Ctrl+Shift+Enter在光标前插入一行。...

PbootCMS后台增加轮播图自定义分组名称

我们知道,在PbootCMS后台的旋转木马图形模块中,当添加新的旋转木马图时,您不能自己选择组。相反,您可以自动创建组,例如组1、组2和组3。这显然对客户的体验不友好,而且您无法直观地知道在网页的哪个位置使用了旋转木马图。让我们分享一下如何启用PbootCMS后台来添加、删除和修改旋转木马图形组。...

如何控制el-image预览图片的大小

Src=“scope.row.carlouseUrl”:1。从“element-ui/packages/image/src/image-viewer”2导入图像查看器importerImageViewer。寄存器组件:3。使用组件&lt;El table columnlabel=“旋转图表”width=“220px”&gt;...

ArchLinux安装英伟达显卡驱动

Optimus manager qt Install novausudopacman-Sxf86-video novau右键单击导航栏上的Intel图标,选择列表中的设置功能,单击左侧的Optimus,然后在右侧窗口中选择nouveau作为切换方法。右键单击导航栏上的Intel图标以选择要使用的图形卡类型。在我选择Nvidia显卡后,您需要注销并再次登录才能...

seata启动报错的可能原因,以及解决方案

seata启动错误的可能原因及解决方案。首先,我下载了seata 0.9版和jdk 12.0.2版。启动错误的截图是:它显示无法创建虚拟机。我尝试了很多方法,但都没有解决。...