现在有一张日志表querylog,里面存放了用户查询商品的信息,其中有一个记录querytime,记录了用户查询商品的具体时间
表结构如下:packageid(包装规格编号)   goodsid(产品编号)    querytime(查询时间)       querycount(查询次数)
    01                      0001              2007-1-1 10:10:10              21
    01                      0001              2007-1-3 10:10:10              3
    01                      0001              2007-3-1 10:10:10              6
    01                      0001              2008-6-11 10:10:10             8
    01                      0001              2008-8-19 10:10:10             13
    01                      0001              2008-9-1 10:10:10              15
    01                      0001              2007-11-1 10:10:10             14
    01                      0001              2008-7-21 10:10:10             22
     *
     *
     *
    01                      0001              2008-11-6 10:30:30             18
现在我希望通过分组查询来形成类似报表似的效果
如果我以年作为条件进行分组,就查出该表内每一年该包装规格的该产品编号下的所有查询次数和,如下
    01                       0001              2008                           58
    01                      0001               2007                           44
如果我以2008年的月作为条件,就查询出该年内所有月的该包装规格的该产品编号下的所有查询次数和,如下
    01                       0001               2008-1                        88
    01                       0001               2008-2                        88
    01                       0001               2008-3                        88
    *
    *
    *
    01                       0001               2008-12                        88
如果我以2008年的10月的日作为条件,就查询出2008年10月每天的该包装规格的该产品编号下的所有查询次数和,如下
     01                       0001               2008-10-1                      88
    01                       0001               2008-10-2                       88
    01                       0001               2008-10-3                       88
    *
    *
    *
    01                        0001              2008-10-31                      88
我认为这是个递进条件的查询,根据年月日的不同选择进行分组查询,应该通过存储过程等实现,希望高手帮我解决这个问题????
得到的查询结果就是上面的形式
    

解决方案 »

  1.   

    select packageid,goodsid,to_char(querytime,'yyyy'), sum(querycount) from querylog group by packageid,goodsid,to_char(querytime,'yyyy');select packageid,goodsid,to_char(querytime,'yyyy-mon'), sum(querycount) from querylog group by packageid,goodsid,to_char(querytime,'yyyy-mon') where to_char(querytime,'yyyy')='2008';select packageid,goodsid,to_char(querytime,'yyyy-mon-dd'), sum(querycount) from querylog group by packageid,goodsid,to_char(querytime,'yyyy- mon-dd')  where  to_char(querytime,'yyyy-mon')='2008-10';
      

  2.   


    --1.
    select packageid, goodsid, to_char(querytime, 'yyyy'), sum(querycount)
      from querylog
     group by packageid, goodsid, to_char(querytime, 'yyyy');
      

  3.   

    select packageid,goodsid,to_char(querytime,'yyyy'), sum(querycount) from querylog
      group by packageid,goodsid,to_char(querytime,'yyyy'); select packageid,goodsid,to_char(querytime,'yyyy-mon'), sum(querycount) from querylog 
    where to_char(querytime,'yyyy')='2008'
     group by packageid,goodsid,to_char(querytime,'yyyy-mon') ; select packageid,goodsid,to_char(querytime,'yyyy-mon-dd'), sum(querycount) from querylog 
    where  to_char(querytime,'yyyy-mon')='2008-10' 
    group by packageid,goodsid,to_char(querytime,'yyyy- mon-dd')  ;
      

  4.   

    感觉需求似乎不对,呵呵。
    --年
    SELECT PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy'), SUM(QUERYCOUNT)
      FROM YOURTABLE
     GROUP BY PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy');--月
    SELECT PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy-mm'), SUM(QUERYCOUNT)
      FROM YOURTABLE
     GROUP BY PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy-mm');
     
    --你需要下面的内容?
    SELECT PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy-mm'), x.ss
      FROM YOURTABLE a,
           (SELECT SUM(QUERYCOUNT) ss
              FROM YOURTABLE
             GROUP BY PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy')) x
    WHERE ss.PACKAGEID =a.PACKAGEID AND ss.GOODSID=a.GOODSID     
     GROUP BY PACKAGEID, GOODSID, TO_CHAR(QUERYTIME, 'yyyy-mm');
      

  5.   


    --2:
    select packageid, goodsid, to_char(querytime, 'yyyy-mm'), sum(querycount)
      from querylog
     group by packageid, goodsid, to_char(querytime, 'yyyy-mm');--3
    select packageid,
           goodsid,
           to_char(querytime, 'yyyy-mm-dd'),
           sum(querycount)
      from querylog
     where to_char(querytime, 'yyyy-mm') = '2008-10'
     order by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd')
     group by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd');
      

  6.   


    --如查2008年1月份的:
    select packageid,
           goodsid,
           to_char(querytime, 'yyyy-mm-dd'),
           sum(querycount)
      from querylog
     where to_char(querytime, 'yyyy-mm') = '2008-01'  --而不是:'2008-1'
     order by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd')
     group by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd');
      

  7.   

    select packageid,
           goodsid,
           to_char(querytime, 'yyyy-mm-dd'),
           sum(querycount)
      from querylog
     where to_char(querytime, 'yyyy-mm') = '2008-10'
     order by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd')
     group by packageid, goodsid, to_char(querytime, 'yyyy-mm-dd');
    就这样应该ok啊
      

  8.   

    packageid(包装规格编号)  goodsid(产品编号)    querytime(查询时间)      querycount(查询次数) 1、SELECT packageid,goodsid,TO_CHAR(querytime,'YYYY'),SUM(querycount) GROUP BY TO_CHAR(querytime,'YYYY')
    2、SELECT packageid,goodsid,TO_CHAR(querytime,'YYYY-MM'),SUM(querycount) GROUP BY TO_CHAR(querytime,'YYYY-MM')
    3、SELECT packageid,goodsid,TO_CHAR(querytime,'YYYY-MM-DD'),SUM(querycount) GROUP BY TO_CHAR(querytime,'YYYY-MM-DD')