实现内容的时间交集计算的sql语句

数据库2025-11-05 06:27:418
实现内容的时间交集计算的sql语句
复制--方便演示,实现算定义一个Source的内容表变量,BeginTime是间交集计句登录时间,EndTime是实现算离线时间   declare @Source table(ID INT IDENTITY(1,1),BeginTime datetime, EndTime datetime)   --定义输出结果表变量   declare @Result table(id INT IDENTITY(1,1),BeginTime datetime, EndTime DATETIME,OnlineTime INT NULL)   --插入演示数据   insert into @Source values(2010-08-16 08:00:00,2010-08-16 08:40:00)   insert into @Source values(2010-08-16 09:00:00,2010-08-16 11:30:00)   insert into @Source values(2010-08-16 09:01:00,2010-08-16 11:32:00)   insert into @Source values(2010-08-16 10:01:00,2010-08-16 12:01:00)   insert into @Source values(2010-08-16 11:00:00,2010-08-16 12:05:00)   insert into @Source values(2010-08-16 12:10:00,2010-08-16 13:40:00)   insert into @Source values(2010-08-16 13:10:00,2010-08-16 14:15:00)   insert into @Source values(2010-08-16 14:00:00,2010-08-16 16:32:00)   insert into @Source values(2010-08-16 07:20:00,2010-08-16 16:40:00)   insert into @Source values(2010-08-16 17:00:00,2010-08-16 20:32:00)   insert into @Source values(2010-08-16 07:00:00,2010-08-16 07:18:00)   insert into @Source values(2010-08-16 07:30:00,2010-08-16 08:20:00)   --模拟数据库中的数据,插入一些其他时间的内容数据   insert into @Source values(2010-08-15 08:00:00,2010-08-16 08:40:00)   insert into @Source values(2010-08-17 09:00:00,2010-08-16 11:30:00)   insert into @Source values(2010-08-14 09:01:00,2010-08-16 11:32:00)   insert into @Source values(2010-08-13 10:01:00,2010-08-16 12:01:00)   insert into @Source values(2010-08-17 11:00:00,2010-08-16 12:05:00)   insert into @Source values(2010-08-17 12:10:00,2010-08-16 13:40:00)   insert into @Source values(2010-08-17 13:10:00,2010-08-16 14:15:00)   insert into @Source values(2010-08-17 14:00:00,2010-08-16 16:32:00)   insert into @Source values(2010-08-15 07:20:00,2010-08-16 16:40:00)   insert into @Source values(2010-08-13 17:00:00,2010-08-16 20:32:00)   insert into @Source values(2010-08-12 07:00:00,2010-08-16 07:18:00)   insert into @Source values(2010-08-11 07:30:00,2010-08-16 08:20:00)   --定义需要用到的变量   DECLARE @count INT,@ID INT,@begintime DATETIME,@endtime DATETIME,@Date DATE   --如果需要指定计算的日期,可以设置日期值,间交集计句否则为null会计算全部的实现算时间   SET @Date = 2010-08-16 07:30:00 --如果日期不为空,亿华云则清除Source中的内容垃圾数据   IF @Date IS NOT NULL   BEGIN       DELETE FROM @Source WHERE BeginTime < @Date OR BeginTime >= DATEADD(DAY,1,@Date)   END   --计算Count,以便进行遍历   SELECT @count = COUNT(1) FROM @Source   --遍历Source中的间交集计句数据   WHILE @count > 0   BEGIN       --根据时间排序,每次取1条数据       SELECT TOP 1 @begintime = BeginTime,实现算@endtime = EndTime ,@IDID = ID FROM @Source       ORDER BY BeginTime       --如果Result中没有记录,则直接插入,内容否则进行判断       IF NOT EXISTS(SELECT 1 FROM @Result)       BEGIN           insert into @Result values(@begintime,间交集计句@endtime,NULL);       END       ELSE       BEGIN           --由于Source的数据是经过排序的,所以下面的实现算插入已经无效,直接注释掉           --IF NOT EXISTS(SELECT 1 FROM @Result WHERE BeginTime < @endtime AND EndTime < @begintime)           --BEGIN           --    insert into @Result values(@begintime,内容@endtime,NULL);           --END           --如果开始时间大于Result中的已存在的IT技术网记录结束时间,则直接插入数据           IF NOT EXISTS(SELECT 1 FROM @Result WHERE EndTime > @begintime)           BEGIN               insert into @Result values(@begintime,间交集计句@endtime,NULL);           END           --判断Result中的数据开始时间是否大于Source中的开始时间,大于则更新           ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime > @begintime AND EndTime < @endtime AND EndTime > @endtime)           BEGIN               UPDATE @Result SET BeginTime = @begintime WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime > @endtime           END           --判断Result中的数据结束时间是否小于Source中的结束时间,小于则更新           ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime < @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime)           BEGIN               UPDATE @Result SET EndTime = @endtime WHERE BeginTime < @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime           END           --判断Result中的记录时间是否被Source中的时间被包含,包含则开始与结束都更新           ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime)           BEGIN               SELECT * FROM @Result WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime               UPDATE @Result SET BeginTime = @begintime, EndTime = @endtime WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime           END       END       --删除已经读取过的高防服务器记录       DELETE FROM @Source WHERE id = @ID       --更新Count       SELECT @count = COUNT(1) FROM @Source   END   --计算OnlineTime   UPDATE @Result SET OnlineTime = DATEDIFF(mi,BeginTime,EndTime)   --显示结果   SELECT * FROM @Result   1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.
本文地址:http://www.bzuk.cn/news/210c7599714.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

用电脑合成人物剪纸,打造独特的手工艺品(电脑合成剪纸教程,手工艺品新潮流)

MyBatis 中为什么不建议使用 Where 1=1?

MySQL实现一个简单版搜索引擎,真是绝了!

让我们一起编写一个接口压测工具

电脑主机配置和安装教程(从零开始学习电脑主机配置和安装,让你的电脑运行更流畅)

什么?跳表都不知道的你还敢去面 BAT!

数据库哪个好?常用数据库软件测评

盘点一道带“坑” Python 基础题目(附源码)

友情链接

滇ICP备2023006006号-33