查询缺失旬度日期

刘痕 2014-03-24 09:57:41
with t as (
select '2001-10-1' d from dual union all
select '2001-10-2' d from dual union all
select '2001-10-3' d from dual union all
select '2002-11-1' d from dual union all
select '2002-11-3' d from dual union all
select '2006-1-2' d from dual union all
select '2007-2-1' d from dual union all
select '2008-11-1' d from dual)
select * from t


2001-10-1表示2001年10月份第一旬度,
2001-10-2表示2001年10月份第二旬度,
2001-10-3表示2001年10月份第三旬度,

请问怎么简单的处理查出到目前为止,从那个最低旬度缺省的年份的月份的旬度?
...全文
104 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘痕 2014-03-24
  • 打赏
  • 举报
回复
引用 1 楼 hidanger521 的回复:
[quote=引用 楼主 hateson 的回复:] with t as ( select '2001-10-1' d from dual union all select '2001-10-2' d from dual union all select '2001-10-3' d from dual union all select '2002-11-1' d from dual union all select '2002-11-3' d from dual union all select '2006-1-2' d from dual union all select '2007-2-1' d from dual union all select '2008-11-1' d from dual) select * from t 2001-10-1表示2001年10月份第一旬度, 2001-10-2表示2001年10月份第二旬度, 2001-10-3表示2001年10月份第三旬度, 请问怎么简单的处理查出到目前为止,从那个最低旬度缺省的年份的月份的旬度?
with t as (  
   select '2001-10-1'  d from dual union all
   select '2001-10-2'  d from dual union all
   select '2001-10-3'  d from dual union all  
   select '2002-11-1'  d from dual union all
   select '2002-11-3'  d from dual union all    
   select '2006-1-2' d from dual union all  
   select '2007-2-1' d from dual union all  
   select '2008-11-1' d from dual)
 SELECT NY || '-' || RM
   FROM (SELECT DISTINCT REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 1) || '-' ||
                         REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 2) NY
           FROM T),
        (SELECT ROWNUM RM FROM DUAL CONNECT BY ROWNUM <= 3)
  WHERE NOT EXISTS (SELECT 1 FROM T WHERE T.D = NY || '-' || RM)
  ORDER BY NY, RM
[/quote] 非常感谢你。我改下到当前日期的话这样写的话还能优化吗? with tab as ( select '2001-10-1' d from dual union all select '2001-10-2' d from dual union all select '2001-10-3' d from dual union all select '2002-11-1' d from dual union all select '2002-11-3' d from dual union all select '2006-1-2' d from dual union all select '2007-2-1' d from dual union all select '2008-11-1' d from dual) select ss from (SELECT SN + (level - 1) SS FROM (select min(to_date(substr(d,0,instr(d,'-',1,2)-1),'yyyy-mm')) SN from tab) T CONNECT BY SN + (level - 1) <= sysdate-1 ) t where to_char(t.ss,'dd') <=3 and ss not in (select to_date(d,'yyyy-mm-dd') from tab)
流浪川 2014-03-24
  • 打赏
  • 举报
回复
引用 楼主 hateson 的回复:
with t as ( select '2001-10-1' d from dual union all select '2001-10-2' d from dual union all select '2001-10-3' d from dual union all select '2002-11-1' d from dual union all select '2002-11-3' d from dual union all select '2006-1-2' d from dual union all select '2007-2-1' d from dual union all select '2008-11-1' d from dual) select * from t 2001-10-1表示2001年10月份第一旬度, 2001-10-2表示2001年10月份第二旬度, 2001-10-3表示2001年10月份第三旬度, 请问怎么简单的处理查出到目前为止,从那个最低旬度缺省的年份的月份的旬度?
with t as (  
   select '2001-10-1'  d from dual union all
   select '2001-10-2'  d from dual union all
   select '2001-10-3'  d from dual union all  
   select '2002-11-1'  d from dual union all
   select '2002-11-3'  d from dual union all    
   select '2006-1-2' d from dual union all  
   select '2007-2-1' d from dual union all  
   select '2008-11-1' d from dual)
 SELECT NY || '-' || RM
   FROM (SELECT DISTINCT REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 1) || '-' ||
                         REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 2) NY
           FROM T),
        (SELECT ROWNUM RM FROM DUAL CONNECT BY ROWNUM <= 3)
  WHERE NOT EXISTS (SELECT 1 FROM T WHERE T.D = NY || '-' || RM)
  ORDER BY NY, RM
流浪川 2014-03-24
  • 打赏
  • 举报
回复
引用 2 楼 hateson 的回复:
[quote=引用 1 楼 hidanger521 的回复:] [quote=引用 楼主 hateson 的回复:] with t as ( select '2001-10-1' d from dual union all select '2001-10-2' d from dual union all select '2001-10-3' d from dual union all select '2002-11-1' d from dual union all select '2002-11-3' d from dual union all select '2006-1-2' d from dual union all select '2007-2-1' d from dual union all select '2008-11-1' d from dual) select * from t 2001-10-1表示2001年10月份第一旬度, 2001-10-2表示2001年10月份第二旬度, 2001-10-3表示2001年10月份第三旬度, 请问怎么简单的处理查出到目前为止,从那个最低旬度缺省的年份的月份的旬度?
with t as (  
   select '2001-10-1'  d from dual union all
   select '2001-10-2'  d from dual union all
   select '2001-10-3'  d from dual union all  
   select '2002-11-1'  d from dual union all
   select '2002-11-3'  d from dual union all    
   select '2006-1-2' d from dual union all  
   select '2007-2-1' d from dual union all  
   select '2008-11-1' d from dual)
 SELECT NY || '-' || RM
   FROM (SELECT DISTINCT REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 1) || '-' ||
                         REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 2) NY
           FROM T),
        (SELECT ROWNUM RM FROM DUAL CONNECT BY ROWNUM <= 3)
  WHERE NOT EXISTS (SELECT 1 FROM T WHERE T.D = NY || '-' || RM)
  ORDER BY NY, RM
[/quote] 非常感谢你。我改下到当前日期的话这样写的话还能优化吗? with tab as ( select '2001-10-1' d from dual union all select '2001-10-2' d from dual union all select '2001-10-3' d from dual union all select '2002-11-1' d from dual union all select '2002-11-3' d from dual union all select '2006-1-2' d from dual union all select '2007-2-1' d from dual union all select '2008-11-1' d from dual) select ss from (SELECT SN + (level - 1) SS FROM (select min(to_date(substr(d,0,instr(d,'-',1,2)-1),'yyyy-mm')) SN from tab) T CONNECT BY SN + (level - 1) <= sysdate-1 ) t where to_char(t.ss,'dd') <=3 and ss not in (select to_date(d,'yyyy-mm-dd') from tab)[/quote] 本身数据集也不高,怎么写都行。。实现了就行啊。。

17,086

社区成员

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

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