在 Oracle SQL 中根据时间对重复的分组项运行总计

2024-04-05

我的第一篇文章,所以请耐心等待。我想根据按日期划分的值进行求和,但只需要日期的总和,而不是按项目分组的总和。已经为此工作好几天了,试图避免使用光标,但可能不得不这样做。

这是我正在查看的数据的示例。顺便说一句,这是在 Oracle 11g 中。

 Key     Time               Amt
------ ------------------ ------
 Null    1-1-2016  00:00    50
 Null    1-1-2016  02:00    50
 Key1    1-1-2016  04:00    30
 Null    1-1-2016  06:00    30
 Null    1-1-2016  08:00    30
 Key2    1-1-2016  10:00    40
 Null    1-1-2016  12:00    40
 Key1    1-1-2016  14:00    30
 Null    1-2-2016  00:00    30
 Key2    1-2-2016  02:00    35

最终结果应该是这样的:

 Key    Start            Stop             Amt
------ ---------------- ---------------- -----
 Null   1-1-2016 00:00   1-1-2016 02:00   100
 Key1   1-1-2016 04:00   1-1-2016 08:00    90
 Key2   1-1-2016 10:00   1-1-2016 12:00    80
 Key1   1-1-2016 14:00   1-2-2016 00:00    60
 key2   1-2-2016 02:00   1-2-2016 02:00    35

我已经能够得到填补空值的钥匙。键并不总是被输入,但在实际更改之前被假定为值。

SELECT key ,time ,amt
FROM (
    SELECT DISTINCT amt, time, 
        ,last_value(amt ignore nulls) OVER (
            ORDER BY time
            ) key
    FROM sample
    ORDER BY time, amt
    )
WHERE amt > 0
ORDER BY time, key NULLS first;

但是,当我尝试仅获取运行总计时,即使有休息时间,它也会对键进行求和。我不知道如何让它在钥匙上断裂。这是我最好的尝试,但效果不是很好而且无法正常工作。

SELECT key,time, amt 
     , sum(amt) OVER (PARTITION BY key ORDER BY time) AS running_total
  FROM (SELECT key, time, amt
          FROM (SELECT DISTINCT
                         amt,
                         time, 
                         last_value(amt ignore nulls) OVER (ORDER BY time) key
                  FROM sample
                 ORDER BY time, amt
               )
         WHERE amt > 0
         ORDER BY time, key NULLS first
       )
ORDER BY time, key NULLS first;

任何帮助,将不胜感激。也许使用光标是唯一的方法。

匹配样本数据。


为了获得您正在寻找的总和,您需要一种方法来对您感兴趣的值进行分组。您可以使用以下几个值来生成分组 ID:ROW_NUMBER分析函数,按键值划分。但是由于您需要复制KEY列值这需要分几个阶段完成:

WITH t1 AS (
  SELECT dta.*
       , last_value(KEY IGNORE NULLS)          -- Fill in the missing
               OVER (ORDER BY TIME ASC) key2   -- key values
    FROM your_data dta
), t2 AS (
  SELECT t1.*
       , row_number() OVER (ORDER BY TIME)     -- Generate a
       - row_number() OVER (PARTITION BY key2  -- grouping ID
                                ORDER BY TIME) gp
    FROM t1
)
SELECT t2.*
     , sum(amt) OVER (PARTITION BY gp, key2
                          ORDER BY TIME) running_sums
  FROM t2;

上面的查询创建了 AMT 的运行总和,每次键值更改时都会重新启动。而代替上面最后一个 select 语句使用的以下查询给出了请求的结果,我不会将其称为运行总和。

SELECT key2
     , MIN(TIME) start_time
     , MAX(TIME) stop_time
     , sum(amt) amt
  FROM t2
 GROUP BY key2, gp;

要查看完整时间值,您可能需要更改会话NLS_DATE_FORMAT如下:

ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';

或者将每个日期列包装在TO_CHAR用于输出目的的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Oracle SQL 中根据时间对重复的分组项运行总计 的相关文章

  • 物化视图与表:有什么优点?

    我很清楚为什么物化视图比仅查询基表更可取 不太清楚的是与仅创建另一个具有与 MV 相同数据的表相比的优势 MV 的唯一优势真的只是易于创建 维护吗 MV 不是相当于具有匹配架构的表和使用 MV SELECT 语句的 INSERT INTO
  • 如何使用 ODBC 检查数据库是否存在

    各位程序员大家好 我已经在互联网上搜索了几天 但找不到仅使用 ODBC 和 SQL 解决此问题的通用方法 有没有办法查看数据库是否已经存在 仅使用ODBC 它必须是标准 SQL 因为用户可以选择自己选择的 DSN 即他自己的 SQL Ser
  • MySQL 主键是否已经处于某种默认顺序

    我刚刚在一个我刚刚开始使用的系统中偶然发现了几行我并不真正理解的代码 该系统有一个大表 可以保存大量具有唯一 ID 的实体 并在不再需要时将其删除 但绝不会重用它们 所以桌子看起来像这样 id info1 info2 info3 1 foo
  • 根本原因 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    我有这个小代码用于将我的 jsp 连接到我的 mysql 数据库 String driver com mysql jdbc Driver Class forName driver String url jdbc mysql localhos
  • 构建复杂 NSCompoundPredicate 的最佳方法是什么?

    我需要建立一个NSPredicate有很多数据 例如 在 SQL 中我会执行如下操作 SELECT FROM TRANSACTIONS WHERE CATEGORY IN categoryList AND LOCATION IN locat
  • MySQL:错误 1215 (HY000):无法添加外键约束

    我读过了数据库系统概念 第六版 西尔伯沙茨 我将在 OS X 上的 MySQL 上实现第 2 章中所示的大学数据库系统 但我在创建表格时遇到了麻烦course 桌子department好像 mysql gt select from depa
  • 查询 ssisdb 以查找包的名称

    我正在查询 ssis 目录以找出目录中所有包的名称 Folder1项目中只有6个包 但查询却给出了9条记录 1 SELECT P NAME FROM SSISDB internal projects PRJ INNER JOIN SSISD
  • 根据另一个表中的值查找总计数

    在Mysql中 我的表中有具有重复值的城市 表城市 Name New York USA New York USA Chicago USA Chicago USA Chicago USA Paris France Nice France Mi
  • SQL Select 使某个值仅出现一次

    对于那些一直在这个 Twitter 克隆上帮助我的人 谢谢你们 在您的帮助下 我已经成功地完成了大部分工作 现在终于完成了关注者功能的最后一步 现在 我有一个包含以下字段的数据集 用户名 推文 日期 数据示例可能如下所示 Username
  • 如何从 DATE 中提取小时、分钟和秒

    我有以下查询 select cast max bid ts as TIMESTAMP from my table 我投了max bid ts因为这是双打 我想成为TMESTAMP 这个查询返回类似这样的内容 2016 04 21 12 41
  • 在数据库中存储多维数组:关系数组还是多维数组?

    我读过很多类似的帖子多维到单维 多维数据库等等 但没有一个答案有帮助 我确实在谷歌上找到了很多文档 但只提供了背景信息 并没有回答手头的问题 我有很多彼此相关的字符串 PHP 脚本中需要它们 结构是分层的 这是一个例子 A AA AAA A
  • 如何比较具有复合主键的 2 个表中的行?

    这是场景 我有两张数据表 一张是2009年版本 一张是2010年版本 每个表的主键都是复合键 我知道每一行都有不同的行数 我需要找出差异 通常 在 正常 主键设置中 我只会查找不在其他表的主键列表中的主键值 但我不知道如何使用复合主键来做到
  • 查找某个字段发生更改时的开始日期和结束日期

    我在表中有这些数据 FIELD A FIELD B FIELD D 249052903 10 15 2011 N 249052903 11 15 2011 P VALUE CHANGED 249052903 12 15 2011 P 249
  • 从 SQL Server 中的字符串中提取子字符串

    我需要从字符串中提取子字符串的一部分 如下所示 YY 12 Yellow ABC WSA Thisone A SS 4MON DHHE A A 我需要按如下方式提取字符串 Yellow Thisone DHHE 你可以使用这样的东西 dec
  • TSQL 多列唯一约束也允许多个 Null

    我目前正在做一些从 MS Access 到 SQL Server 的迁移 Access 允许唯一索引中存在多个 Null 而 SQL Server 不允许 我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移 CREAT
  • 针对树结构优化 SQL

    如何从数据库中获取具有最佳性能的树形结构数据 例如 假设数据库中有一个文件夹层次结构 文件夹数据库行所在的位置ID Name and ParentID列 您会使用特殊的算法一次获取所有数据 最大限度地减少数据库调用量并在代码中处理它吗 或者
  • Laravel 查询生成器:枢轴不在的地方

    wherePivotIn已提及here https laravel com docs 5 5 eloquent relationships many to many under 通过中间表列过滤关系 但我找不到任何有关相反功能的信息 As
  • 仅从 MySQL 中的日期时间 (YYYY-MM-DD HH:MM:SS) 中选择不同的日期

    执行此命令会带来以下结果 所有列中的所有日期 因此它本质上与 SELECT date 执行相同的操作 没有不同 SELECT DISTINCT date FROM daily ORDER BY date DESC 2013 02 12 16
  • 实体框架..自引用表..获取深度=x的记录?

    我成功地在实体框架中使用自引用表 但我不知道如何获得所需深度的记录 这应该是什么逻辑 Model public class FamilyLabel public FamilyLabel this Children new Collectio
  • 如何在JdbcTemplate中执行多批量删除?

    我想一次删除多个数据库条目 仅当 3 个字段匹配 此处 姓名 电子邮件 年龄 时 才应删除每个条目 如果我只想删除单个属性 我会选择 String sql DELETE FROM persons WHERE email IN JdbcTem

随机推荐

  • PHP 8 严格类型强制应用于本机函数?

    我的代码适用于 PHP 7 round microtime 3 但在 PHP 8 中 致命错误 未捕获类型错误 round 参数 1 num 必须是 int float 类型 4 中给出的字符串堆栈跟踪 0 round 0 21066100
  • 嵌套 ng-repeat 性能

    我听说嵌套 ng repeats 会严重影响 Angular 的性能 如果它会导致大量带有 Angular 表达式的元素 我实际上已经遇到过这种情况 我正在尝试编写一些代码 我尝试使用bindonce https github com Pa
  • R - 从字符串右侧第 n 次出现字符后提取信息

    我见过很多次提取w gsub但它们主要处理从左到右或在一次出现后提取 我想从右到左匹配 数四次出现 匹配第 3 次和第 4 次出现之间的所有内容 例如 string outcome here are some words to try so
  • 在模板化派生类中,为什么需要在成员函数内使用“this->”限定基类成员名称?

    当我调查 Qt 的源代码时 我发现 trolltech 的人明确使用this关键字来访问析构函数上的字段 inline QScopedPointer T oldD this gt d Cleanup cleanup oldD this gt
  • 尽管安装了 Spyder-Terminal,Spyder 5 中仍然没有终端

    我在 Mac OS Big Sur 上安装了 Spyder 5 我从终端运行此命令 conda install spider terminal c spider ide 该命令运行没有错误 仍然没有终端 我一定做错了什么 因为终端没有显示在
  • 使用地图功能

    我遇到了问题map功能 当我想打印创建的列表时 解释器显示指针 gt gt gt squares map lambda x x 2 range 10 gt gt gt print squares
  • 我可以使用 Node.js 阅读 PDF 或 Word 文档吗?

    我找不到任何软件包来执行此操作 我知道 PHP 有大量的 PDF 库 比如http www fpdf org http www fpdf org 但是 Node 有什么用吗 textract https npmjs org package
  • Deno 中子进程如何向父进程发送消息?

    From 这个答案 https stackoverflow com a 62085642 6587634 我知道父进程可以与子进程通信 但是反过来呢 从工人那里你必须使用Worker postMessage https developer
  • SVG 图像在某些 Web 服务器上不显示

    我在某些服务器上的 html 文件中显示 svg 图像时遇到问题 这让我感到困惑 因为我认为是否渲染 svg 图像是由浏览器决定的 但浏览器保持不变 我使用以下字符串来显示它们 img src path to image svg alt i
  • F# 中的全局运算符重载

    我正在开始为笛卡尔积和矩阵乘法定义自己的运算符 将矩阵和向量别名为列表 type Matrix float list list type Vector float list 我可以通过编写自己的初始化代码 并获得笛卡尔积 let inlin
  • pytesseract 错误 Windows 错误 [错误 2]

    您好 我正在尝试使用 python 库 pytesseract 从图像中提取文本 请查找代码 from PIL import Image from pytesseract import image to string print image
  • C++ 中的列表析构函数

    我刚刚实现了链接列表 它工作得很好 但甚至很难 我已经看到我无法在 Node 上创建工作析构函数的符号 这就是为什么它在代码中未实现 我需要在节点上实现工作析构函数 List 的析构函数 但这一个很简单 我将只使用 Node 类的析构函数
  • MySql 数据在第 1 行的“提前”列被截断

    在我的项目中 我使用了 txtAdvance 的关键事件 double gtotal Double parseDouble txtGtotal getText double ad Double parseDouble txtAdvance
  • Rails:如何查询 activerecord 中模型的时间范围(而不是日期)值

    我有一个模型time属性 这是用户想要接收电子邮件的时间 即美国东部时间下午 5 点 的配置 它在数据库中存储为21 00 00 我想按范围查询 例如 我希望每个用户都有一个提醒时间20 55 00 and 21 05 05 Rails 似
  • 如果定义了 item,则 Ansible with_items

    安塞布尔 1 9 4 该脚本应该仅在定义了某些变量的主机上执行某些任务 正常情况下可以正常工作 但与with items陈述 debug var symlinks when symlinks is defined name Create o
  • 如何从 React JS 中的另一个组件获取引用

    主App组件中的代码如下 class App extends Component componentDidMount console log this ref debugger render return div div
  • 更改 Twitter 引导模式中的背景颜色?

    在twitter bootstrap中创建模态时 有什么方法可以更改背景颜色吗 完全删除阴影吗 注意 为了消除阴影 这doesn t有效 因为它也会改变点击行为 我仍然希望能够在模式外部单击以将其关闭 myModal modal backd
  • 如何外部化错误消息

    这是一个外部化错误消息的最佳实践问题 我正在开发一个项目 其中存在代码 简短描述和严重性错误 我想知道外部化此类描述的最佳方式是什么 我想到的是将它们放在代码中是不好的 将它们存储在数据库中 将它们放在属性文件中 或者可能有一个加载了描述的
  • Pandas 查找,将数据框中的一列映射到不同数据框中的另一列

    我有两个 pandas 数据框 df1 和 df2 df1 具有 X 列 Y 列以及 weeknum df2 具有 Z weeknum 和 datetime 列 我基本上想保留 df1 并在其中添加一个额外的列 该列对应 weeknum 的
  • 在 Oracle SQL 中根据时间对重复的分组项运行总计

    我的第一篇文章 所以请耐心等待 我想根据按日期划分的值进行求和 但只需要日期的总和 而不是按项目分组的总和 已经为此工作好几天了 试图避免使用光标 但可能不得不这样做 这是我正在查看的数据的示例 顺便说一句 这是在 Oracle 11g 中