按条件对行进行分组

2024-02-10

我有这个数据:

Start   End     Quantity
425     449     24
450     474     24
475     499     24
500     524     24
2300    2324    24
2400    2499    99
2500    2599    99
2800    2899    99
2900    2999    99
3200    3249    49
3250    3299    49
3300    3349    49
3350    3399    49
3400    3449    49
3500    3549    49
3600    3624    24
3650    3674    24
3700    3724    24
3950    3964    14
4000    4000    0
4150    4399    249
4400    4499    99
5034    5075    41

数量是以下结果End - Start.

我想获得以下数据,Generated rows:

Start   End     Quantity
425     449     24
450     474     24
475     499     24
500     524     24
425     524     96
2300    2324    24
2300    2324    24
2400    2499    99
2500    2599    99
-----GENERATED----
425     2599    438
------------------

2800    2899    99
2900    2999    99
3200    3249    49
3250    3299    49
3300    3349    49
3350    3399    49
3400    3449    49
3500    3549    49
-----GENERATED-----
2800    3549    492
------------------

3600    3624    24
3650    3674    24
3700    3724    24
3950    3964    14
4000    4000    0
4150    4399    249
4400    4499    99
5034    5075    41
-----GENERATED-----
3600    5075    475
------------------

条件是它必须将所有数量相加到 500。如果超过 500,则重新计数。

我尝试过使用 Rollup,但找不到使其工作的合适条件。

当然,通过编程而不是SQL更容易做到这一点,但我们必须在数据库环境中完成。获取生成行的工具可以是任何东西,循环函数、新表等。

错误解决

我在运行 @Prdp 的查询时遇到错误:

Msg 530, Level 16, State 1, Line 1
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.

我在这里找到了解决方案:http://sqlhints.com/tag/the-statement-termminate-the-maximum-recursion-100-has-been-exhausted-before-statement-completion/ http://sqlhints.com/tag/the-statement-terminated-the-maximum-recursion-100-has-been-exhausted-before-statement-completion/

Update 1

使用@Prdp 的查询我们得到以下结果:

Start   End     rn  st
(400)   424     1   24
425     449     2   48
450     474     3   72
475     499     4   96
500     524     5   120
2300    2324    6   144
2400    2499    7   243
2500    2599    8   342
2800    (2899)  9   (441)  
(2900)  2999    10  99
3200    3249    11  148
3250    3299    12  197
3300    3349    13  246
3350    3399    14  295
3400    3449    15  344
3500    3549    16  393
3600    3624    17  417
3650    3674    18  441
3700    3724    19  465
3950    3964    20  479
4000    (4000)  21  (479) 
(4150)  4399    22  249
4400    4499    23  348
5034    (5075)  24  (389) 

它越来越接近我们所需要的了。是否可以只提取中间的数据( and )同时丢弃其他数据? 我们也可以使用游标。


您可以使用Recursive CTE。我想不出更好的办法了。

;WITH cte
     AS (SELECT *,
                Row_number()OVER(ORDER BY start) rn
         FROM   Yourtable),
     rec_cte
     AS (SELECT *,
                ( [End] - Start ) AS st,
                1                 AS grp
         FROM   cte
         WHERE  rn = 1
         UNION ALL
         SELECT a.*,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN a.[End] - a.Start
                  ELSE st + ( a.[End] - a.Start )
                END,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN b.grp + 1
                  ELSE grp
                END
         FROM   cte a
                JOIN rec_cte b
                  ON a.rn = b.rn + 1)
SELECT Min(Start) as Start,
       Max([End]) as [End],
       Max(st) as Quantity
FROM   rec_cte
GROUP  BY grp
OPTION (maxrecursion 0) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按条件对行进行分组 的相关文章

随机推荐

  • 最大最近值sql

    我有一个包含一些数值 直径 的表格 18 21 27 34 42 48 60 76 89 114 ETC 例如 如果我在文本框中输入一个数字 如何选择最大最接近的值 25 选择 27 100 选择 114 48 选择 48 我输入了以下代码
  • Subversion 1.5 的性能很糟糕吗?

    我们一直在致力于一个每个人都在主干上工作的项目 该项目已经达到了我们的开发团队不断壮大的程度 我们终于开始发布客户端 都是好事 因此 为了帮助协调这一切 我们开始遵循 SVN 的分支 合并等最佳实践 我们面临的问题是合并需要花费 20 分钟
  • python Flask-restful 无法获取资源类中的应用程序访问权限

    这是来自的示例代码Flask restful 文档 http flask restful readthedocs org en latest quickstart html a minimal api from flask import F
  • 同一 Django 应用程序中的多个域和多个目录

    我试图支持一个相当复杂的架构 在同一个 django 应用程序中混合多个域和多个目录 基本上 我们会有这样的网址 http www firstdomains com DJANGO APP http www firstdomains com
  • C# gRPC 客户端拦截器设置授权标头

    我正在尝试为 gRPC 客户端创建一个拦截器 始终设置配置的 API 令牌 问题是我找不到设置的方法context Options Headers 如果我正在阅读文档 我需要致电WithHeaders方法 需要设置新的元数据 以便我可以添加
  • MySQL查询-比较版本号

    我的 SQL 表中有一个字段存储版本号 例如 3 4 23 or 1 224 43 有没有办法使用比 更棒该字段的条件 SELECT FROM versions WHERE version number gt 2 1 27 感谢 symcb
  • 访问类方法内的变量

    我正在使用 Tkinter Python 创建一个预算程序 这是我的代码的基础知识 class Expense def init self def Save self TotalAmount blah 所以我需要访问TotalAmount在
  • Maven 隐式“提供”依赖项未显示在“依赖项:树”中

    一位同事正在尝试建立一个新的 Spring 项目 该项目明确依赖于 spring security 而 spring security 又 隐式 依赖于 wss4j 在运行测试时 他遇到了缺少类的问题 我们已将缺失的类跟踪到 axis sa
  • 我应该使用 ASP:Label 标记吗?

    我正在 ASP NET 中构建一个表单来发送电子邮件 到目前为止 一切进展顺利 我能够将 ASP TextBox 内容传递到电子邮件 没有任何问题 现在 我的做法是将静态文本作为 TB 标签放入 然后使用 TB 控件作为输入 我应该使用 A
  • 无法锁定 DLL 上的 c++ 11 std::mutex [重复]

    这个问题在这里已经有答案了 我试图通过使用 std lock 对象来防止多次调用 DLL 初始化函数 在独立程序上使用这样的程序时 include
  • 对数据集的一部分进行多项式拟合的算法

    我有一个算法问题 我不知道 stackoverflow 是否是发布它的正确位置 但由于我使用 matlab 并且想用它来完成此操作 所以我将其发布在那里 我的问题如下 我有一组数据 除了在这组数据的末尾 这些点必须非常线性之外 我对此了解不
  • 使用 aiohttp 嵌套“异步”

    我想创建一个使用 aiohttp 进行 API 调用的调度程序类 我试过这个 import asyncio import aiohttp class MySession def init self self session None asy
  • TextInputEditText:ArgumentNullException:MvxWeakEventSubscription 中缺少源事件信息

    突然 我的 TextInputEditText 的绑定开始失败 这与链接器有关 如果我将链接器设置为 无 则一切都会按预期进行 我使用的许多其他绑定仍然可以正常工作 我得到的堆栈 视图绑定期间抛出异常 ArgumentNullExcepti
  • 在背景中捕捉图像?

    我试图在不加载相机或预览界面的情况下从相机捕获背景图像 在我的应用程序中 照片是在后台拍摄的 没有预览屏幕 只有普通的应用程序屏幕 然后稍后显示给用户 有人可以指出我正确的方向吗 您必须使用 AVCaptureSession 和 AVCap
  • 访问 RadioButton 并在 Espresso 中选择它

    我正在使用 Espresso 来测试 Android 应用程序 我在尝试找到一种方法来访问和选择当前活动的RadioButton 属于RadioGroup 时遇到麻烦 有没有人有什么建议 给出以下布局
  • 如何处理 mod_rewrite 中查询字符串中的“#”?

    I asked 这个问题 https stackoverflow com questions 1640977 how to redirect old ugly urls to seo friendly ones关于将旧的 丑陋 链接重写为搜
  • Java Servlet/Jsp 图像上传以及表单值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个 jsp 表单 它接受有关员
  • 全局变量没有全局作用域

    supposedlyGlobalVariable blah ARoutine localVariable asdf MsgBox The global variable value is supposedlyGlobalVariable T
  • 访问 Bamboo 秘密/密码变量?

    我的团队有一些旧的竹子管道 其中秘密和密码在竹子变量中配置 并用竹子掩盖这些值 现在没有人知道密码 也没有记录下来 有什么方法可以访问 打印并查看bamboo 秘密 密码 变量中的值吗 读取秘密变量有一个技巧 创建包含内容的脚本任务 ech
  • 按条件对行进行分组

    我有这个数据 Start End Quantity 425 449 24 450 474 24 475 499 24 500 524 24 2300 2324 24 2400 2499 99 2500 2599 99 2800 2899 9