Sql 如何将查询中的日期与上个月的日期进行比较
我试图在oracle中编写一个查询,其中有一个表a,我想在过程中查找Transfer。在此要求中,我必须将二月数据与一月数据进行比较,并生成另一列Y或N结果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
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;