现在有一张日志表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
我认为这是个递进条件的查询,根据年月日的不同选择进行分组查询,应该通过存储过程等实现,希望高手帮我解决这个问题????
得到的查询结果就是上面的形式
表结构如下: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');
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') ;
--年
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');
--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');
--如查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');
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啊
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')