Sql 如何将查询中的日期与上个月的日期进行比较

Sql 如何将查询中的日期与上个月的日期进行比较,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图在oracle中编写一个查询,其中有一个表a,我想在过程中查找Transfer。在此要求中,我必须将二月数据与一月数据进行比较,并生成另一列Y或N结果 ID Date Course1 Course2 123 01-JAN-2010 2000 3500 123 01-FEB-2010 2000 3500 123 01-MAR-2010 2500 3500 123 01-APR-2010

我试图在oracle中编写一个查询,其中有一个表a,我想在过程中查找Transfer。在此要求中,我必须将二月数据与一月数据进行比较,并生成另一列Y或N结果

ID     Date          Course1    Course2
123    01-JAN-2010   2000       3500
123    01-FEB-2010   2000       3500
123    01-MAR-2010   2500       3500
123    01-APR-2010   2000       3500
123    01-MAY-2010   2000       3000
123    01-JUN-2010   2000       3500
要求:如果课程1上个月课程1或 课程2上月课程2 然后是Y 其他

预期成果:

ID     Date          Course1    Course2   Transfer
123    01-JAN-2010   2000       3500      
123    01-FEB-2010   2000       3500      N
123    01-MAR-2010   2500       3500      Y
123    01-APR-2010   2000       3500      Y
123    01-MAY-2010   2000       3000      Y
123    01-JUN-2010   2000       3000      N
我的问题是:

select a.ID, a.Date, a.Course1, a.Course2,

case when (a.Course1 <> (select b.Course1 from TableA b where b.Date = add_months(a.Date-1) and b.ID = a.ID )  or a.Course2 <> (select b.Course2 from TableA b where b.Date = add_months(a.Date-1) and b.ID = a.ID ) )
        then Y
    else N
end  as Transfer

from TableA a
where a.ID = '123';
我的问题

select idd, datee, course1, course2, 
  case when (course1 <> lag(course1,1,course1) over (order by datee)) or
        (course2 <> lag(course2,1,course2) over (order by datee)) 
  then 'Y' else 'N' end as transfer
 from tableA 
  where idd in ('123', '456')
 order by idd, datee;
选择idd、日期、课程1、课程2、,
(课程1滞后(课程1,1,课程1)超过(按日期排序)时的情况)或
(课程2滞后(课程2,1,课程2)超过(按日期排序))
然后“Y”或“N”结束为转移
从表格
其中idd输入('123','456')
国际直拨电话订购,日期为;

在oracle中存在函数滞后

select id, date, course1, course2, 
  case when (course1 <> lag(course1,1,course1) over (order by date)) or
            (course2 <> lag(course2,1,course2) over (order by date)) 
  then 'Y' else 'N' end as transfer
  from tableA 
  order by date;
选择id、日期、课程1、课程2、,
(课程1滞后(课程1,1,课程1)超过(按日期排序)时的情况)或
(课程2滞后(课程2,1,课程2)超过(按日期排序))
然后“Y”或“N”结束为转移
从表格
按日期订购;
编辑

选择idd、日期、课程1、课程2、,
(course1滞后(course1,1,course1)超过(idd订单,日期)时的情况)或
(course2滞后(course2,1,course2)超过(国际直拨电话订购,日期))
然后“Y”或“N”结束为转移
从表格
其中idd输入('123','456')
国际直拨电话订购,日期为;

现在,我需要在一个表中更新多个ID的查询,该表中有不同的日期序列。你能给我一些建议吗it@Qasim0787但此查询适用于表中的所有日期。那怎么了?我加了两个id作为例子。若您可以创建表格并尝试,您将看到我遇到了什么问题。@Qasim0787我已向您发布了编辑过的答案。如果您向order by添加了另一列,则还需要在滞后定义中添加该列。我的第一个查询仅适用于单个idd。现在就试试很好…完美
select id, date, course1, course2, 
  case when (course1 <> lag(course1,1,course1) over (order by date)) or
            (course2 <> lag(course2,1,course2) over (order by date)) 
  then 'Y' else 'N' end as transfer
  from tableA 
  order by date;
select idd, datee, course1, course2, 
  case when (course1 <> lag(course1,1,course1) over (order by idd, datee)) or
        (course2 <> lag(course2,1,course2) over (order by idd, datee)) 
  then 'Y' else 'N' end as transfer
 from tableA 
  where idd in ('123', '456')
 order by idd, datee;