本帖最后由 blackkettle 于 2011-07-26 17:18:03 编辑

解决方案 »

  1.   

    with t as(
    select 'jack' account,to_date('2011-01-01','yyyy-mm-dd') dt from dual
    union all
    select 'jack' account,to_date('2011-01-02','yyyy-mm-dd') dt from dual
    union all
    select 'jack' account,to_date('2011-02-01','yyyy-mm-dd') dt from dual
    )select t.account,t.dt,count(to_char(t.dt,'yyyy-mm')) over(partition by to_char(t.dt,'yyyy-mm'))
    from t
      

  2.   

    直接用这句就行了·    把表名换成你的实际表名select t.account,t.dt,count(to_char(t.dt,'yyyy-mm')) over(partition by to_char(t.dt,'yyyy-mm'))
    from t
      

  3.   

    今天先写一个,明天在来写个!WITH t AS
    (SELECT 'jack' ACCOUNT,to_date('2011-01-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-01-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-03','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-02','yyyy-mm-dd') LoginDate FROM dual)
    SELECT ACCOUNT,LoginDate,COUNT(1) over(PARTITION BY FLAG) num FROM
    (SELECT ACCOUNT,
           LoginDate,
           LoginDate - DENSE_RANK() OVER(PARTITION BY ACCOUNT ORDER BY LoginDate) FLAG
      FROM t);
      

  4.   


    jack 2011-01-01 2
    jack 2011-01-02 2
    jack 2011-02-01 3
    jack 2011-02-02 3
    jack 2011-02-03 3jack 在 2011-01-01,2011-01-02, 2011-02-01, 2011-02-02, 2011-02-03 这5天里有登录,
    其中
    2011-01-01,2011-01-02 这 2天是连续的,就标明为 2
    2011-02-01, 2011-02-02, 2011-02-03  这 3天是连续的,就标明为 3.
      

  5.   

    lizhuxin2008你真是太帅了!期待你明天的 SQL!非常感谢!
      

  6.   

    (1)WITH t AS
    (SELECT 'jack' ACCOUNT,to_date('2011-01-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-01-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-01-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-03','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-02','yyyy-mm-dd') LoginDate FROM dual)
    SELECT ACCOUNT,LoginDate,COUNT(1) over(PARTITION BY FLAG) num FROM
    (SELECT ACCOUNT,
           LoginDate,
           LoginDate - DENSE_RANK() OVER(PARTITION BY ACCOUNT ORDER BY LoginDate) FLAG
      FROM (SELECT DISTINCT ACCOUNT,LoginDate FROM T));
    (2)WITH t AS
    (SELECT 'jack' ACCOUNT,to_date('2011-01-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-01-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-01-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-02','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'jack' ACCOUNT,to_date('2011-02-03','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-01','yyyy-mm-dd') LoginDate FROM dual
    UNION ALL SELECT 'mary' ACCOUNT,to_date('2011-03-02','yyyy-mm-dd') LoginDate FROM dual)
    SELECT ACCOUNT,LoginDate,COUNT(1) over(PARTITION BY LoginDate-ROWNUM)  num FROM
    (SELECT DISTINCT ACCOUNT,LoginDate FROM t ORDER BY ACCOUNT,LoginDate)
      

  7.   

    lizhuxin2008,你真是太强了。膜拜!