早教吧作业答案频道 -->其他-->
如果在一个循环中对比两条记录?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执行不下去哇?是否可以补充一下?
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 行)
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 行)
看了 如果在一个循环中对比两条记录...的网友还看了以下:
设函数f(u)具有二阶导数,而z=f((e^x)*sin(y))满足方程d^2(z)/d^2(x^ 2020-05-16 …
e^x^2求导看成f'(u)f(u)=u^2u=e^x------>f'(u)=2u*u'=2e^ 2020-06-12 …
物理自学疑问1.在用公式E=U/d时,U用绝对值带如.但在计算U=E*d时,E的正负需要带入吗?2 2020-06-14 …
若E表示电动势,U表示外电压,U′表示内电压,R表示外电路的总电阻,r表示内电阻,I表示电流,则下 2020-07-13 …
积分1/(根号下1+e的2x次幂)dx怎么推导的.令u=e^(-x),du=-e^(-x)dx,1 2020-07-29 …
maple不等方程组solve({-(-u^3/3-e*u^2/2+u)>-(e^2+4)^(3/2 2020-10-31 …
电场中U=Ed,U我们学习的时候类比为高度h,E我们类比为g,有E=U/d,那么h/g等于什么?写错 2020-11-29 …
多元线性回归Y=Bx+u①E(u)=0②Var(u)=E(u^2)=σ^2,Cov(u,u)=0③C 2020-12-14 …
积分运算(1+e的u次方)/(u+e的u次方)*du=-dy/y怎样变成ln|u+e的u次方|+ln 2020-12-26 …
部分积分法的时候是取求导数比较简单的项是u吗?e^x乘以cosxdx的时候教科书是取u=e^xdv= 2020-12-31 …