SQL语句,选定一批符合要求的数据

jansonleader 2011-03-14 02:39:31
表格的内容比较简单:
------------------------------------------------------------------------------
DIR DOMAIN DATE
D:/Program/Date1.csv Domain1 2011/01/02
D:/Program/Date2.csv Domain1 2011/01/09
D:/Program/Date2.csv Domain1 2011/01/16
D:/Program/Date3.csv Domain2 2011/01/02
D:/Program/Date4.csv Domain2 2011/01/03
D:/Program/Date5.csv Domain2 2011/01/09
------------------------------------------------------------------------------
问题:
正常情况下,同一个Domain下的Date字段按增序排列后,应该是相隔7天存在一条数据(如上:Domain1)。但是存在一些不规律的数据,相隔日期不是七天(小于或大于7天)。

需求:
现在要挑选并形成另一份优化后数据,要求同一个Domain下,每隔7天有且仅有一条数据
1,如果在相隔的7天内 存在多条数据,则取日期最晚的一条数据;
2,如果在相隔的7天内 没有任何数据,则取上个7天内的最晚一条数据;


希望我把问题和需求都阐述清楚了。这个问题困扰了我好几天了 没想到好的处理方法。期待各位高手能给出实现功能的SQL语句。

非常感谢!
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pf0914 2011-03-17
  • 打赏
  • 举报
回复
........我以为是SqlServer.不好意思.
pf0914 2011-03-17
  • 打赏
  • 举报
回复
用clr来写函数,好像比较容易实现.
jansonleader 2011-03-17
  • 打赏
  • 举报
回复
Is there anybody?
jansonleader 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jdsnhan 的回复:]

SQL code
select distinct domain,tdate
from b
start with tdate='2011/01/02'
connect by tdate=prior to_char(to_date(tdate,'yyyy/mm/dd')+7,'yyyy/mm/dd')
[/Quote]

你好,非常感谢你的回复。但是,你给的sql语句好像处理不了我的问题,你的sql语句无法直接运行,我稍微修改了一下:
select distinct domain,m_date
from table
start with m_date=to_date('2011/01/02','YYYY/MM/DD')
connect by m_date = prior (m_date+7)


但是,运行仅仅能够得到一条结果。 即: domain1 2011/01/02

问题在于两点:
第一,不同Domain下,第一次出现数据的日期不相同,不都是2011/01/02;
第二,不是每隔7天必定出现一次数据,数据不完整,现在需要补充完成。

问题依然没有解决。
jdsnhan 2011-03-14
  • 打赏
  • 举报
回复
select distinct domain,tdate
from b
start with tdate='2011/01/02'
connect by tdate=prior to_char(to_date(tdate,'yyyy/mm/dd')+7,'yyyy/mm/dd')
psufnxk2008 2011-03-14
  • 打赏
  • 举报
回复
写成存储过程,使用游标和索引记录应该可以实现吧。俺也只是这样想。
jansonleader 2011-03-14
  • 打赏
  • 举报
回复
希望有人能提供一下帮助!谢谢~

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧