SQL Server 如何将 5 分钟的间隔重新组合为 15 分钟的间隔?

2024-03-22

我正在建立一个网站,您可以在其中在线预约。我不会详细解释所有内容,但我有一张桌子,上面有我可以预约的时间。以 5 分钟为间隔进行分配。这是一个例子:

ID      StartDate               EndDate
492548  2016-12-16 08:00:00.000 2016-12-16 08:05:00.000
492549  2016-12-16 08:05:00.000 2016-12-16 08:10:00.000
492550  2016-12-16 08:10:00.000 2016-12-16 08:15:00.000
492551  2016-12-16 08:15:00.000 2016-12-16 08:20:00.000
492552  2016-12-16 08:20:00.000 2016-12-16 08:25:00.000
492553  2016-12-16 08:25:00.000 2016-12-16 08:30:00.000
492554  2016-12-16 08:30:00.000 2016-12-16 08:35:00.000
492555  2016-12-16 08:35:00.000 2016-12-16 08:40:00.000
492556  2016-12-16 08:40:00.000 2016-12-16 08:45:00.000
492557  2016-12-16 08:45:00.000 2016-12-16 08:50:00.000
492558  2016-12-16 08:50:00.000 2016-12-16 08:55:00.000
492559  2016-12-16 08:55:00.000 2016-12-16 09:00:00.000
492560  2016-12-16 09:00:00.000 2016-12-16 09:05:00.000
492561  2016-12-16 09:05:00.000 2016-12-16 09:10:00.000
492562  2016-12-16 09:10:00.000 2016-12-16 09:15:00.000
492563  2016-12-16 09:15:00.000 2016-12-16 09:20:00.000
492564  2016-12-16 09:20:00.000 2016-12-16 09:25:00.000
492565  2016-12-16 09:25:00.000 2016-12-16 09:30:00.000
492566  2016-12-16 09:30:00.000 2016-12-16 09:35:00.000

根据咨询时间,根据咨询原因,我必须将这些行分组为一并知道最小值(IDSchedulingInterval)和最大值(IDSchedulingInterval)。

如果持续时间为 15 分钟,我想要的结果示例如下:

Min(ID) Max(ID) StartDate               EndDate
492548  492550  2016-12-16 08:00:00.000 2016-12-16 08:15:00.000
492551  492553  2016-12-16 08:15:00.000 2016-12-16 08:30:00.000
492554  492556  2016-12-16 08:30:00.000 2016-12-16 08:45:00.000
492557  492559  2016-12-16 08:45:00.000 2016-12-16 09:00:00.000

持续时间可以改变。我不知道如何继续进行此查询..

EDIT以下是您必须检查的一些例外情况。这是我的桌子

ID      StartDate               EndDate                  Isreserved
492548  2016-12-16 08:00:00.000 2016-12-16 08:05:00.000  0  
492549  2016-12-16 08:05:00.000 2016-12-16 08:10:00.000  0  
492550  2016-12-16 08:10:00.000 2016-12-16 08:15:00.000  0  
492551  2016-12-16 08:15:00.000 2016-12-16 08:20:00.000  0  
492552  2016-12-16 08:20:00.000 2016-12-16 08:25:00.000  0      
492555  2016-12-16 08:35:00.000 2016-12-16 08:40:00.000  0  
492556  2016-12-16 08:40:00.000 2016-12-16 08:45:00.000  0  
492557  2016-12-16 08:45:00.000 2016-12-16 08:50:00.000  1  
492558  2016-12-16 08:50:00.000 2016-12-16 08:55:00.000  1  
492559  2016-12-16 08:55:00.000 2016-12-16 09:00:00.000  1  
492560  2016-12-16 09:00:00.000 2016-12-16 09:05:00.000  0  
492561  2016-12-16 09:05:00.000 2016-12-16 09:10:00.000  0  
492562  2016-12-16 09:10:00.000 2016-12-16 09:15:00.000  0  
492563  2016-12-16 09:15:00.000 2016-12-16 09:20:00.000  0  
492564  2016-12-16 09:20:00.000 2016-12-16 09:25:00.000  0  
492565  2016-12-16 09:25:00.000 2016-12-16 09:30:00.000  0  
492566  2016-12-16 09:30:00.000 2016-12-16 09:35:00.000  0  

这里8:45到9:00之间的时间是预留的,所以不能坐。 另外,8:25 至 8:35 之间没有时间,因此也无法预订。举个例子,如果我想预约 30 分钟,那么我应该得到如下结果:

Min(ID) Max(ID) StartDate               EndDate
492560  492565  2016-12-16 09:00:00.000 2016-12-16 09:30:00.000

仅返回 1 行,因为其他间隔之间没有足够的时间

EDIT 2

感谢 DVT,我修改了查询,我的查询几乎可以工作,这里唯一的问题是重叠时间。这是我的查询:

DECLARE @newinterval INT = 60;

;with cte as (
SELECT
    t1.IdSchedulingByInterval AS IdSchedulingByIntervalMin
    , t2.IdSchedulingByInterval AS IdSchedulingByIntervalMax
    , t1.SchedulingByIntervalStartDate 
    , t2.SchedulingByIntervalEndDate
FROM
   RDV_tbSchedulingByInterval t1
    JOIN RDV_tbSchedulingByInterval t2 ON t2.SchedulingByIntervalStartDate = DATEADD(minute, @newinterval - 5, t1.SchedulingByIntervalStartDate)
    ) select * from cte where (select SUM(5) from RDV_tbSchedulingByInterval where IdSchedulingByInterval 
                                between cte.IdSchedulingByIntervalMin  and cte.IdSchedulingByIntervalMax ) = @newinterval
    order by cte.SchedulingByIntervalStartDate

这是我的结果:

492551  492562  2016-12-16 08:15:00.000 2016-12-16 09:15:00.000
492552  492563  2016-12-16 08:20:00.000 2016-12-16 09:20:00.000
492553  492564  2016-12-16 08:25:00.000 2016-12-16 09:25:00.000
492554  492565  2016-12-16 08:30:00.000 2016-12-16 09:30:00.000
492555  492566  2016-12-16 08:35:00.000 2016-12-16 09:35:00.000
492556  492567  2016-12-16 08:40:00.000 2016-12-16 09:40:00.000
492557  492568  2016-12-16 08:45:00.000 2016-12-16 09:45:00.000
492558  492569  2016-12-16 08:50:00.000 2016-12-16 09:50:00.000
492559  492570  2016-12-16 08:55:00.000 2016-12-16 09:55:00.000
492560  492571  2016-12-16 09:00:00.000 2016-12-16 10:00:00.000
492561  492572  2016-12-16 09:05:00.000 2016-12-16 10:05:00.000
492562  492573  2016-12-16 09:10:00.000 2016-12-16 10:10:00.000
492563  492574  2016-12-16 09:15:00.000 2016-12-16 10:15:00.000
492564  492575  2016-12-16 09:20:00.000 2016-12-16 10:20:00.000
492565  492576  2016-12-16 09:25:00.000 2016-12-16 10:25:00.000
492566  492577  2016-12-16 09:30:00.000 2016-12-16 10:30:00.000
492567  492578  2016-12-16 09:35:00.000 2016-12-16 10:35:00.000
492568  492579  2016-12-16 09:40:00.000 2016-12-16 10:40:00.000
492569  492580  2016-12-16 09:45:00.000 2016-12-16 10:45:00.000

预期结果:

492551  492562  2016-12-16 08:15:00.000 2016-12-16 09:15:00.000
492563  492574  2016-12-16 09:15:00.000 2016-12-16 10:15:00.000

我不想让时间与其他时间重叠


-- This converts the period to date-time format
SELECT 
    -- note the 15, the "minute", and the starting point to convert the 
    -- period back to original time
    DATEADD(minute, AP.FifteenMinutePeriod * 15, '2010-01-01T00:00:00') AS Period,
    AP.AvgValue
FROM
    -- this groups by the period and gets the average
    (SELECT
        P.FifteenMinutePeriod,
        AVG(P.Value) AS AvgValue
    FROM
        -- This calculates the period (fifteen minutes in this instance)
        (SELECT 
            -- note the division by 15 and the "minute" to build the 15 minute periods
            -- the '2010-01-01T00:00:00' is the starting point for the periods
            datediff(minute, '2010-01-01T00:00:00', T.Time)/15 AS FifteenMinutePeriod,
            T.Value
        FROM Test T) AS P
    GROUP BY P.FifteenMinutePeriod) AP
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 如何将 5 分钟的间隔重新组合为 15 分钟的间隔? 的相关文章

随机推荐

  • 使用“json.dumps”时 JSON 对象中的项目乱序?

    我在用着json dumps转换成json就像 countries append id row id name row name timezone row timezone print json dumps countries 我得到的结果
  • 禁用 EclipseLink 缓存

    在我的应用程序中 当用户登录系统时 系统从数据库读取一些设置并将它们存储在用户的会话中 系统使用 EclipseLink JPA 2 0 通过 JPA 查询执行此操作 当我更改数据库中的某些设置并再次登录时 查询将返回以前的结果 Eclip
  • 定期调用 Android 服务 [GoodApporach?]

    我的要求是 Android 应用程序必须每隔一小时 可配置 向服务器发送用户位置详细信息 纬度和经度 我遵循的方法是使用警报管理器 我以配置的时间间隔调用我的服务 无论应用程序是否正在运行 该服务都会将位置详细信息发送到服务器 这是一个好方
  • URLWithString 对于资源路径返回 nil - iphone

    由于某种原因获取资源的 URL 时出现问题 此代码位于 viewDidLoad 中 并且可以在其他应用程序中使用 但由于某种原因不能在此处使用 NSString audioString NSBundle mainBundle pathFor
  • 升级到 Xcode 5.0.2:xib 警告。属性不可用

    我最近升级到了 xcode 5 0 2 现在 当我构建 Cocoa 应用程序时 我收到此警告 属性不可用 在 10 8 之前的 Mac OS X 版本上使用当前宽度作为最大布局宽度 我尝试找到 最大布局宽度 但无法找到 我该如何摆脱这个警告
  • ES6的导出和花括号

    我看到聊天频道中发布了一段代码 他的代码的最后是 export UserInformation 有些团体表示语法错误 有人说只要变量存在就可以 那么哪一组是正确的呢 我也是第一次见到这种语法 我在导出时从未见过花括号 我只在导入时使用过它们
  • 使用 PHP 测试 FTP 连接

    我正在使用下面的 PHP 脚本来测试 FTP 连接 目前 如果连接成功 它正在打印文件数组 如果能够连接 如何让它也显示消息 就像 连接成功 一样 con ftp connect server or die Couldn t connect
  • 如何将 facebook 测试页面订阅到 facebook apps webhook

    我正在创建聊天机器人并想在 Facebook 上建立联系 我想在我的页面中测试我的信使聊天机器人 但我必须首先进行应用程序审查和业务验证 但我不想这样做 因为我刚刚开发了我的聊天机器人 或者你可以说这是暂存环境 I found that w
  • Python:将参数传递给 threading.Thread 实例的正确方法是什么

    我扩展了 threading Thread 我的想法是做这样的事情 class StateManager threading Thread def run self lock state while True lock acquire se
  • 如何用 Canvas 绘制曲线动画?

    我有很多点想慢慢画出来 我尝试 setTimeOut 以及由此产生的效果tutorial http www html5canvastutorials com advanced html5 canvas linear motion anima
  • 如何从 MySQL 检索 JSON 数据?

    我有下表及其关系 我将 JSON 数据存储在 client services 表中 他们有什么方法可以使用 MySQL 查询检索 JSON 值 如下所示 SELECT getJson quota as quota client id FRO
  • 在 tkinter 文件对话框中指定文件路径

    我有一个文件对话框来打开文件 但是 我要打开的文件与我编写的程序位于不同的目录中 文件对话框打开到我所在的目录 有没有办法指定文件对话框打开的位置 这是相关代码 root Tk root fileName tkFileDialog asko
  • 调整通话状态栏的大小?

    如何根据笔尖上的通话状态栏调整视图大小 我认为它只是设置调整大小属性 但它们没有为根 UIView 启用 我认为我的主要问题是我不知道这一切叫什么 除了谈论模拟器菜单命令之外 我在任何文档中都找不到对通话中状态栏的任何引用 iOS 将调用你
  • Kendo Grid:如何在一个单元格中显示 List

    我尝试迭代列表并将所有元素显示到列中的单元格中 但我无法使其正常工作 这是我到目前为止所拥有的 在网格定义中 columns Bound x gt x locationList Title Locations Included Client
  • 在 Windows 上运行 libxlsxwriter

    我正在尝试使用libxlsxwriter 但我似乎可以让事情正确编译或运行 我按照 Windows 的说明使用Mingw w64 and msys2可以在这里找到 http libxlsxwriter github io getting s
  • 减少小程序加载时间

    我有一个 html 文件 其中包含一个作为小程序的 jar 文件 当我打开 html 文件时 加载小程序的时间太多了 有什么方法可以减少加载时间吗 这里有三个主要因素在起作用 1 Java 启动时间 冷启动过去需要 5 10 秒 但是随着J
  • 如何修复 Mavericks 上 Gemfile 中的 libv8 错误?

    当我跑步时bundle install I get An error occurred while installing libv8 3 11 8 17 and Bundler cannot continue Make sure that
  • 在准备好的语句中使用 COLLECT() 时,为什么会收到“ORA-00932:不一致的数据类型:预期 - 得到 -”?

    我将此查询与Perl DBI https metacpan org module DBI SELECT c change id COLLECT t tag AS the tags FROM changes c LEFT JOIN tags
  • Cassandra 返回数值的无序结果集

    我是 No SQL 新手 刚刚开始学习 Cassandra 我有以下问题要问 我创建了一个包含一列的简单表来了解 Cassandra 分区和集群 并尝试在插入后查询所有值 我的表结构 create table if not exists m
  • SQL Server 如何将 5 分钟的间隔重新组合为 15 分钟的间隔?

    我正在建立一个网站 您可以在其中在线预约 我不会详细解释所有内容 但我有一张桌子 上面有我可以预约的时间 以 5 分钟为间隔进行分配 这是一个例子 ID StartDate EndDate 492548 2016 12 16 08 00 0