sql查询连续数据,剔除周日放假的影响
如
test(init_date[日期],account[账号],check[校验值])
表,需求:
查出连续2天check为true的数据,按照account[账号]来,即每个account[账号]连续的数据,周五跟周一算连续的,遇到放假则放假前后的也算连续的记录
。
数据大概是这样的:
1,日期是int型(20131205),账号是char数组类型,check是boolean 类型;
2,周六、周日该表无数据,这时,某个account的check为true,也算是连续的;
3.放假前后,某个account的check为true,也算是连续的;
4.周六、周日、节假日,test表无记录,即init_date[日期]为节假日时,test没有这个记录;
5.数据库是Oacle数据库。
鬼魅魍魉S
11 years, 3 months ago
Answers
加一个辅助表 WORKINGDAY(day[日期]), 记录所有的的工作日.
sql:
select A.account account, A.init_date date1, B.init_date date2
from test A, test B, WORKINGDAY WA, WORKINGDAY WB
where A.account = B.account
and A.check = 'Y'
and B.check = 'Y'
and A.init_date = WA.day
and B.init_date = WB.day
and to_date(A.init_date, 'yyyyMMdd') + 1 = to_date(B.init_date, 'yyyyMMdd');
手头没有Oracle环境, 上面的sql没有测试; Oracle表结构里没有boolean类型
Demon.X
answered 11 years, 3 months ago