早教吧 育儿知识 作业答案 考试题库 百科 知识分享

如果在一个循环中对比两条记录?createtableBBUSERINFOT(USERIDNUMBER(10)NOTNULL,PRODUCTIDVARCHAR2(8)NOTNULL,BEGINDATEDATENOTNULL,ENDDATEDATENOTNULL);表结构如上,一个userid对应有多个productid现在要做同

题目详情
如果在一个循环中对比两条记录?
create table BB_USER_INFO_T
(
USER_ID NUMBER(10) NOT NULL,
PRODUCT_ID VARCHAR2(8) NOT NULL,
BEGIN_DATE DATE NOT NULL,
END_DATE DATE NOT NULL);
表结构如上,
一个user_id 对应有多个product_id
现在要做同一个user_id的前一个product_id的end_date和后一个product_id的begin_date做比较,如果相等就是正确,不等,就把这个product_id给变量?
怎么实现啊?
补充数据:
user_id product_id begin_date end_date
000001 1232131 2010-01-01 2010-02-01
000001 1232332 2010-02-01 2011-01-01
000001 1233434 2010-03-01 2011-01-01
00002------------------------------------------
如上:user_id=000001 的数据,正常情况下第二条product_id=1232332的end_date应该是第三条product_id=1233434的begin_date
我现在需要通过循环,找出像第二条这样错误的数据.如果找出.将第二条的product_id给变量,外层的要使用.并,将第三条的begin_date也给出.外层用于update第二条的end_date;
再次补充,是oracle环境,3楼的大哥,你那个方法我在oracle执行不下去哇?是否可以补充一下?
▼优质解答
答案和解析
--> 测试数据:#A
if object_id('tempdb.dbo.#A') is not null drop table #A
create table #A ([user_id] varchar(6),product_id int,begin_date datetime,end_date datetime)
insert into #A
select '000001',1232131,'2010-01-01','2010-02-01' union all
select '000001',1232332,'2010-02-01','2011-01-01' union all
select '000001',1233434,'2010-03-01','2011-01-01'
select
*,
(SELECT TOP 1 begin_date from #A WHERE [user_id]=A.[user_id] AND product_id>A.product_id ORDER BY product_id) AS NEXTDATE
FROM
#A A
WHERE ISNULL((SELECT TOP 1 begin_date from #A WHERE [user_id]=A.[user_id] AND product_id>A.product_id ORDER BY product_id),end_date)end_date
/*
(所影响的行数为 3 行)
user_id product_id begin_date end_date NEXTDATE
------- ----------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------
000001 1232332 2010-02-01 00:00:00.000 2011-01-01 00:00:00.000 2010-03-01 00:00:00.000
(所影响的行数为 1 行)
看了 如果在一个循环中对比两条记录...的网友还看了以下:

描述系统状态的物理量,叫做。如体积、压强、温度等。对于一个不受外界影响的系统,无论其初始状态如何,  2020-05-14 …

matlab中已知频谱的振幅谱如何通过反傅里叶变换做出不同相位的信号如题,比如已知下图中的某个振幅  2020-05-17 …

有人做了如下实验:将深色桦尺蠖和浅色桦尺蠖分别进行标记,然后放养于工业污染区.经过一段时间后,将所  2020-06-29 …

有人为班上做了一件好事,老师猜想一定在A,B,C,D四人当中,当老师问他们时,他们分别做了如下回答。  2020-11-04 …

(1)观察发现如题(a)图,若点A,B在直线同侧,在直线上找一点P,使AP+BP的值最小.做法如下:  2020-11-06 …

2014年11月11日至16日在广东珠海举行第十届中国国际航展.如图是中国空军八一飞行表演队驾驶歼-  2020-11-12 …

有人数89到115之间做操,如果排成3列不多也不少;如果排成5列则少2;有人数89到115之间做操,  2020-11-15 …

三角函数.1——那些什么sin,cos,tan.什么的第一象限,第二象限是+或-,怎么理解的》》说明  2020-11-24 …

求一篇以“说不如做”为话题的作文用名人实例说明,要有说服力文章的主旨为少说多做,说不如做,做了再说,  2020-11-28 …

求一篇以“说不如做”为话题的作文用名人实例说明,要有说服力文章的主旨为少说多做,说不如做,做了再说,  2020-11-28 …