首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >比较下一行中的值并更新当前行| Oracle SQL

比较下一行中的值并更新当前行| Oracle SQL
EN

Stack Overflow用户
提问于 2020-01-03 22:30:44
回答 2查看 759关注 0票数 0

我的数据库中有以下格式的数据:

代码语言:javascript
运行
AI代码解释
复制
Name    Values          Start_of_week  End_of_week
Name1   1_2_2_1_1_2_1   22-Dec-19      28-Dec-19
Name1   1_2_2_1_2_2_1   29-Dec-19      04-Jan-20
Name1   1_2_2_2_2_2_1   05-Jan-20      11-Jan-20
Name1   1_2_2_2_2_2_1   12-Jan-20      18-Jan-20
Name1   1_2_2_2_2_2_1   19-Jan-20      25-Jan-20
Name1   1_2_2_2_2_2_1   26-Jan-20      01-Feb-20
Name1   1_2_2_2_2_2_1   02-Feb-20      08-Feb-20
Name1   1_2_2_2_2_2_1   09-Feb-20      15-Feb-20
Name1   1_2_2_2_2_2_1   16-Feb-20      22-Feb-20
Name1   1_2_2_2_2_2_1   23-Feb-20      29-Feb-20
Name1   1_2_2_2_2_2_1   01-Mar-20      07-Mar-20
Name2   1_2_2_1_1_2_1   22-Dec-19      28-Dec-19
Name2   1_2_2_2_2_2_2   29-Dec-19      04-Jan-20
Name2   1_2_2_2_2_2_2   05-Jan-20      11-Jan-20
Name2   1_2_2_2_2_2_2   12-Jan-20      18-Jan-20
Name2   1_2_2_2_2_2_2   19-Jan-20      25-Jan-20
Name2   1_2_2_2_2_2_2   26-Jan-20      01-Feb-20
Name2   1_2_2_2_2_2_2   02-Feb-20      08-Feb-20
Name2   1_2_2_2_2_2_2   09-Feb-20      15-Feb-20
Name2   1_2_2_2_2_2_2   16-Feb-20      22-Feb-20
Name2   1_2_2_2_2_2_2   23-Feb-20      29-Feb-20
Name2   1_2_2_2_2_2_2   01-Mar-20      07-Mar-20

我需要对每个名称列的值列进行比较,并更新end_of_week。例如,第一行和第二行具有不同的值列,因此不需要更新end_of_week列。第三列和第四列具有相同的值列,因此应该为第三行更新第四行的周末,结果如下所示。

然后将此行与下一行进行比较,如果值列相同,则应从下一行获取end_of_week并在此行中进行更新。对于每个name列值的每一组行,都应该发生这种情况。

我尝试使用lead()函数比较这些行,但无法与更新后的下一组行进行比较。

代码语言:javascript
运行
AI代码解释
复制
Name   Values         start_of_week  end_of_week
Name1  1_2_2_1_1_2_1  22-Dec-19      28-Dec-19
Name1  1_2_2_1_2_2_1  29-Dec-19      04-Jan-20
Name1  1_2_2_2_2_2_1  05-Jan-20      07-Mar-20
Name2  1_2_2_1_1_2_1  22-Dec-19      28-Dec-19
Name2  1_2_2_2_2_2_2  29-Dec-19      07-Mar-20
EN

回答 2

Stack Overflow用户

发布于 2020-01-03 23:07:03

这是一个缝隙和岛屿问题。一个简单的解决方案是行号的差异:

代码语言:javascript
运行
AI代码解释
复制
select name, value,
       min(week_start), max(week_end)
from (select t.*,
             row_number() over (partition by name order by week_start) as seqnum,
             row_number() over (partition by name, value order by week_start) as seqnum_2
      from t
     ) t
group by name, value, (seqnum - seqnum_2);

为什么这样做有点难以解释。但是,如果您查看子查询的结果,您将看到行号的差异如何识别具有相同值的相邻行。

票数 0
EN

Stack Overflow用户

发布于 2020-01-04 03:20:14

从样本数据来看,我认为这不是一个差距和孤岛问题。您可以使用group by获得所需的输出。

代码语言:javascript
运行
AI代码解释
复制
Select name, value,
       Min(start_of_week),
       Max(end_of_week)
From your_table
Group by name, value;

干杯!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59586121

复制
相关文章
oracle sql 时间比较_oracle todate格式
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说oracle sql 时间比较_oracle todate格式,希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
8600
sql中datetime日期类型字段比较(mysql&oracle)
mysql 可以直接用大于号,也可以用  between  and SELECT * FROM users WHERE UPDATE_DATE >= '2021-08-12 11:22:09' AND UPDATE_DATE <= '2021-08-15 11:22:33'; SELECT * FROM users WHERE UPDATE_DATE BETWEEN '2021-08-12 11:22:09' AND '2021-08-15 11:22:33'; Oracle oracle sql日期比较
红目香薰
2022/11/29
3.6K0
mysql查询字段中带空格的值的sql语句,并替换
(自己写的这四行)查询带有空格值的数据:SELECT * FROM 表名 WHERE 字段名 like ‘% %’;
全栈程序员站长
2022/07/11
9.5K0
Oracle中的SQL优化
一.SQL语言的使用 1.IN 操作符     用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。     但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:     ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。     由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
星哥玩云
2022/08/18
1.9K0
SQL 获取一行中多个字段的最大值
在 chaos(id,v1,v2,v3) 表中获取每个 id 对应的 v1、v2、v3 字段的最大值,v1、v2、v3 同为数值类型。
白日梦想家
2020/12/14
11.7K0
[Go] golang中接口值(interface)的比较
当写项目的过程中 , 有时候进行逻辑判断 , 如果没注意对两个interface类型的变量进行比较 , 会造成混乱问题
唯一Chat
2021/01/21
3.8K0
SQL"已更新或者删除的行值要么不能使该行成为唯一行,要么改变了多个行(X行)“解决办法
  这种问题大多是由于没有主键(PK)导致同一张表中存在若干条相同的数据。DBMS存储时,只为其存储一条数据,因为DBMS底层做了优化,以减少数据冗余。所以删除或更新一条重复数据就牵一发而动全身。
孙晨c
2019/09/10
3.6K0
SQL"已更新或者删除的行值要么不能使该行成为唯一行,要么改变了多个行(X行)“解决办法
SQL中的Null值处理
在日常的开发中,遇到需要处理 Null 值的场景还是蛮常见的。比如,查询某个字段包含 Null 值的记录、在展示的时候将 Null 值转为其它值、聚合包含 Null 值的列等。
白日梦想家
2020/08/27
2.9K0
Oracle中的基本SQL知识
a) SQL, Structured Query Language, 结构化查询语言 b) SQL 是最重要的关系数据库操作语言,是所有关系数据库 管理系统的标准语言. c) SQL 语言是非过程化的语言, 只需要告诉做什么, 不需要 关注怎么做, 简单.
时间静止不是简史
2020/07/24
1.1K0
Oracle中的基本SQL知识
oracle的行转列和列转行_sql中行转列
--============================================== 作者:王运亮(wwwwgou) 时间:2011-06-10 博客:http://blog.csdn.net/wwwwgou --==============================================
Java架构师必看
2022/05/26
3.9K0
如何对矩阵中的所有值进行比较?
需求相对比较明确,就是在矩阵中显示的值,需要进行整体比较,而不是单个字段值直接进行的比较。如图1所示,确认矩阵中最大值或者最小值。
逍遥之
2020/05/14
7.9K0
oracle中sql的递归查询运用
主键 名字 职位 上级id 部门id
小小鱼儿小小林
2020/06/23
2.7K0
深入剖析:认识Oracle 中的 NULL 值
杨廷琨,网名 yangtingkun 云和恩墨技术总监,Oracle ACE Director,ACOUG 核心专家 经常看到很多人提出和NULL有关的问题。NULL其实是数据库中特有的类型,Oracle中很多容易出现的错误都是和NULL有关的;下面简单总结一下NULL的相关知识。 NULL的基础概念和由来 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL,则表示这个列的值是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,NULL并不是一个确定的值。这是 NULL 的由来、
数据和云
2018/03/06
2.9K0
深入剖析:认识Oracle 中的 NULL 值
关于Java中的整数类型值比较的疑问
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/164
joshua317
2021/10/19
1.2K0
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
luanhz
2021/06/25
7.3K0
oracle 下一些零散的命令和 sql 语句
以前学过一些数据库相关的知识,回想起来刚入门还是看了传智播客的视频,杨忠科老师的sql语句教程。现在已经好多年了,中间自己也不断的在用,但是一直没有提高,只是会简单增删改查,今天学的 cast..then..等等都没怎么用过,所以记录一下没有学到过的内容,以后备用。
我与梦想有个约会
2023/10/20
1890
SQL 中的行转列和列转行
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。
玖柒的小窝
2021/11/08
5.6K0
SQL 中的行转列和列转行
【DB笔试面试584】在Oracle中,如何得到已执行的目标SQL中的绑定变量的值?
当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL中的绑定变量的具体输入值就会被Oracle捕获:
AiDBA宝典
2019/09/29
3.1K0
盘点 Sql 中几个比较实用的小 Tips!
工作中,我们经常需要编写 SQL 脚本,对数据库进行增、删、改、查,很少会考虑到 Sql 性能优化
AirPython
2021/11/23
7540
Oracle-awrddrpt.sql比较两个AWR差异报告
awrddrpt.sql脚本位于$ORACLE_HOME/rdbms/admin目录中。
小小工匠
2021/08/17
8490

相似问题

比较oracle sql中的当前行和下一行

22

使用pandas python比较下一行的值并更改当前行值。

10

比较oracle sql中的当前行和上一行

11

将当前行值与下一行值进行比较

11

Oracle SQL用于比较2行并返回值

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文