在 SQL 中选择具有多个 GROUP 的表中 TOP 2 值的 SUM

2023-11-22

我一直在 SQL Server 2000 中使用集合,并且我的临时表之一 (#Periods) 具有以下表结构:



    RestCTR     HoursCTR    Duration    Rest
    ----------------------------------------
    1           337         2           0
    2           337         46          1
    3           337         2           0
    4           337         46          1
    5           338         1           0
    6           338         46          1
    7           338         2           0
    8           338         46          1
    9           338         1           0
    10          339         46          1
    ...
  

我想做的是计算每个 HoursCTR 的 2 个最长休息时间的总和,最好使用集合和临时表(而不是游标或嵌套子查询)。

这是梦想中的查询,但在 SQL 中不起作用(无论我运行多少次):

Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR    

HoursCTR 可以有任意数量的休息时间(包括没有休息时间)。

我目前的解决方案不是很优雅,基本上涉及以下步骤:

  1. 获取最长休息时间,按 HoursCTR 分组
  2. 选择第一个(最小)RestCTR 行,该行返回每个 HoursCTR 的最大持续时间
  3. 重复步骤 1(排除步骤 2 中已收集的行)
  4. 重复步骤 2(再次排除步骤 2 中收集的行)
  5. 将 RestCTR 行(来自步骤 2 和 4)合并到单个表中
  6. 获取步骤 5 中的行所指向的持续时间的总和,按 HoursCTR 分组

如果有任何设置函数可以减少这个过程,我们将非常欢迎。


在 SQL Server 中执行此操作的最佳方法是使用公用表表达式,使用开窗函数对每组中的行进行编号ROW_NUMBER():

WITH NumberedPeriods AS (
  SELECT HoursCTR, Duration, ROW_NUMBER() 
    OVER (PARTITION BY HoursCTR ORDER BY Duration DESC) AS RN
  FROM #Periods
  WHERE Rest = 1
)
SELECT HoursCTR, SUM(Duration) AS LongestBreaks
FROM NumberedPeriods
WHERE RN <= 2
GROUP BY HoursCTR

edit:我在分区中添加了 ORDER BY 子句,以获得两个最长的休息时间。


抱歉,我没有注意到您需要它才能在 Microsoft SQL Server 2000 中工作。该版本不支持 CTE 或窗口函数。我会留下上面的答案,以防对其他人有帮助。

在 SQL Server 2000 中,常见的建议是使用相关子查询:

SELECT p1.HoursCTR, (SELECT SUM(t.Duration) FROM 
    (SELECT TOP 2 p2.Duration FROM #Periods AS p2
     WHERE p2.HoursCTR = p1.HoursCTR 
     ORDER BY p2.Duration DESC) AS t) AS LongestBreaks
FROM #Periods AS p1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL 中选择具有多个 GROUP 的表中 TOP 2 值的 SUM 的相关文章

  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • 是否有适用于 SQL Server Express 的 SQL Server Profiler? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 SQL Server Express 的 SQL Server Profiler 也许是开源的 或者也许只是一个可以帮助我查
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR
  • SELECT NULL、*、NULL、NULL 中令人困惑的 SQL 错误

    的背景我试图解决第四个现实任务 https www hackthissite org playlevel 4 在 hackthissite org 中 无法确切地弄清楚我应该在 URL 中注入什么 SQL 来检索电子邮件列表 浪费了几个小时
  • SQL WHERE 取决于星期几

    我需要检查不同日期的记录 具体取决于当前是一周中的哪一天 在周五 我需要它查看整个下周 直到下周日 在其他任何一天 它都应该检查当前周 直到下周日 我目前有以下内容 但由于语法错误而无法工作 是否可以做一个CASE WHEN里面一个WHER
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • SQL 按 IN 子句中的元素排序

    我有一个ITEM表 我想返回按 IN 子句中通知的相同顺序排序的结果 这些 ID 由用户告知 今天我有这个 SELECT FROM ITEM WHERE ITEM ID IN 45 2 671 6 ORDER BY CASE ITEM ID
  • JDBC 和多线程

    我正在尝试使用多线程方法运行一些查询 但是我认为我做错了什么 因为我的程序需要大约五分钟来运行一个简单的选择语句 例如 SELECT FROM TABLE WHERE ID 123 我的实现如下 我使用一个连接对象 在我的运行方法中 pub
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • 查询和扫描多行性能缓慢

    下面的查询一行的执行时间为 6 18 分钟 Exception type 1 的基数值为 3 我不知道如何提高性能 Query select count 1 as rage tap from summary funnel 1066 s jo
  • 在 SQL Server 中选择 XML 元素

    我有一些 XML 需要使用 SQL Server 2008 进行解析 我想我已经接近得到我想要的了 但是我没有正确的语法 我相信 我有以下内容 DECLARE doc XML SET doc
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • Web SQL 数据库 + Javascript 循环

    我正在尝试解决这个问题 但我自己似乎无法解决 我正在使用 Web SQL DB 但无法让循环正常使用它 I use for var i 0 i lt numberofArticles 1 i db transaction function
  • SQL Server 列的默认随机 10 个字符串值

    我有一个专栏rndm在我的桌子上 客人 现在 对于领域Default value or Binding对于表 每当插入新行时 我想自动将 10 个字符的随机字符串插入到该列中作为默认值 该随机字符串不能包含特殊字符 只能包含以下字符a zA

随机推荐

  • 谜题:在一次解析中对一组 0 和 1 进行排序。

    是否可以在一次解析中按降序排列仅由 1 和 0 组成的数组而不使用辅助数组 例如 假设你有一个数组a 1 0 0 0 1 0 1 为此 预期输出将是a 1 1 1 0 0 0 0 我写了下面的 C 代码 但它在两次解析中找到了解决方案 可以
  • C++ 64位int:按引用传递或按值传递

    这是一个关于 64 位整数的效率问题 假设我不需要修改 int 参数的值 我应该通过值还是引用传递它 假设32位机器 1 32位整数 Iguess答案是 按值传递 因为 按引用传递 将产生额外的内存查找开销 2 64位int 如果我通过引用
  • 在R中的字符串中的两个字母之间添加空格[重复]

    这个问题在这里已经有答案了 假设我有一个像这样的字符串 s PleaseAddSpacesBetweenTheseWords 如何在 R 中使用 gsub 在单词之间添加空格 以便我得到 Please Add Spaces Between
  • Android AdRequest 仅返回 onAdFailedToLoad AdRequest.ERROR_CODE_NO_FILL

    我的应用程序已经在 Google Play 商店上架一个月了 一切正常 两天前 我将其添加到 专为家庭设计 类别中 我收到了 Google 团队的接受和祝贺 从那时起 我的插页式广告就不再显示了 我收到AdRequest ERROR COD
  • 更改“选择”突出显示颜色[重复]

    这个问题在这里已经有答案了 我有一个自定义的下拉菜单框 见图 我想更改选项上的突出显示颜色以摆脱可怕的蓝色并将其更改为我选择的颜色 我还想停止周围的蓝色突出显示框整个事情并从选项框中删除边框 我该如何删除其中的任何一个或全部 Thanks
  • 如何使用 Swift 以编程方式更改语言环境

    我正在通过 Swift 在 XCODE 6 3 上制作 ios 应用程序 我的应用程序将具有选择语言功能 如下图所示 我已经有了本地语言的故事板 但我不知道如何通过按钮以编程方式更改应用程序的本地化 任何人都知道该怎么做 下面是使用 Swi
  • RDF图蕴涵

    我刚刚读到了 RDF 资源描述框架 的蕴涵概念 任何人都可以告诉我两个 RDF 图的蕴涵示例并对其进行一些解释 Thanks 假设您有以下内容 ex book1 rdf type ex Publication ex book2 rdf ty
  • 如何查找分组的 SQL 中位数

    我正在使用 SQL Server 2008 如果我有一个这样的表 Code Value 4 240 4 299 4 210 2 NULL 2 3 6 30 6 80 6 10 4 240 2 30 请问如何通过代码列找到中位数 AND 组
  • 警告:未知转义序列:'\040' [默认启用]

    我正在用 C 语言编写一个简单的应用程序 我想在 BSD 许可证下发布它 应用程序的一部分负责向用户打印有关程序的信息 但是 我在打印许可证文本时遇到问题 这是例子 include
  • 为什么并发字典没有可见的 Add() 方法?

    我只是想知道 ConcurrentDictionary 怎么可能没有 Visual Studio IDE 中可见的 Add 方法 我似乎只得到 TryX 方法 例如 TryAdd TryUpdate 等 我可以看到ConcurrentDic
  • 如何在两个以上的UIView之间做翻转动画?

    我在扩展 UIView 的类中有动画代码 Start Animation Block CGContextRef context UIGraphicsGetCurrentContext UIView beginAnimations nil c
  • Spring+Hibernate 中的@Transactional

    我正在使用春季 3 1 休眠 4 x在我的网络应用程序中 在我的 DAO 中 我保存用户类型对象如下 sessionFactory getCurrentSession save user 但出现以下异常 org hibernate Hibe
  • 向 CGPoint 类型参数发送 nil

    假设我有这个方法 void placeView UIView theView withCenterIn CGPoint centerPoint 所以我传递了视图和一个指向视图中心的点 但碰巧我不需要指定中心 只需要指定视图 传递 nil 会
  • 需要一个正则表达式工具来根据所选文本建议表达式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我发现了一些在线工具 可以让我查看我在示例文本上创建的正则表达式的效果 但我正在寻找一种可以根据所选文本的一部分提出表达式建议的工具 例如 假设我有
  • 该IP、站点或移动应用程序无权使用该IP授权的API密钥

    我正在使用 Google Places API 它要求您提供允许使用该服务的 IP 列表 该 API 在我的本地计算机上运行良好 但它给出了 该IP 网站或移动应用程序无权使用该API 钥匙 当我从生产服务器使用它时 我已经添加了所需的 I
  • 具有相同签名的两个方法的互斥约束

    所以这两个方法具有相同的签名但不同的约束 public static void Method
  • 有开放的 iCalender API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何 API 可供我使用并将事件数据发布到 例如使用查询字符串 并取回访问者可以下载并添加到其日历中的文件 我当然可以自己编写脚本 但如果有开
  • 程序化短信[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 以编程方式发送短信的最佳方式是什么 是否有基于免费 Web 服务的 SMS 网关 我知道如果我碰巧知道用户的运营商 Sprint AT T 等 我可以发送通过电子邮件地址发送短信
  • Android 中的 RxJava 异步任务

    我正在尝试在 Android 中使用 RxJava 实现异步任务 我尝试了以下代码 但没有成功 它在 UI 线程上执行 我正在使用以下版本的 RxAndroid 0 24 0 try Observable just someMethodWh
  • 在 SQL 中选择具有多个 GROUP 的表中 TOP 2 值的 SUM

    我一直在 SQL Server 2000 中使用集合 并且我的临时表之一 Periods 具有以下表结构 RestCTR HoursCTR Duration Rest 1 337 2 0 2 337 46 1 3 337 2 0 4 337