日期:2014-05-17  浏览次数:20801 次

SQL 按天分组查询
本帖最后由 bdy1234567 于 2012-11-20 11:48:08 编辑 有两张表 tab1 和 tab2
它们分别有一个日期字段,记录着本条数据插入时间,格式是 yyyy-MM-dd hh24:mi:ss
要统计的结果集就是每天每张表有多少条数据。

比如需要查询2012年11月份,那么查询的结果集就是30行,分别是2012-11-01到2012-11-30每天的行数。
如果某个日期没有数据,那么显示为0。
最前面的一列要显示每一天的日期,格式:yyyy-MM-dd。

注意:tab2 中要查询多种不同的条件,每一种条件放在结果集的一列中。
比如tab2中有一列col1,那么结果集中就会显示,每一天tab2.col1 = 0的有多少条、每一天tab2.col1=1的有多少条,以此类推。

比较着急,在线等,麻烦各位帮忙看看。
------最佳解决方案--------------------

 select t.date, t.c, t1.c1, t1.c3
  from (select trunc(date) date, count(*) c from tab1 group by trunc(date)) t
  left join (select trunc(date) date,
                    sum(decode(status, 0, 1, 0)) c1,
                    sum(decode(status, 0, 2, 0)) c3
               from tab2
              group by trunc(date)) t1 on t.date = t1.date
------其他解决方案--------------------
select *
  from (SELECT TO_CHAR(TO_DATE(col1Date, 'YYYY-MM-DD HH24:MI:SS'),
                       'YYYY-MM-DD') AS tab1Date,
               count(1) as tab1col1
          FROM TEST1
         group by TO_CHAR(TO_DATE(col1Date, 'YYYY-MM-DD HH24:MI:SS'),
                          'YYYY-MM-DD')
         order by TO_CHAR(TO_DATE(col1Date, 'YYYY-MM-DD HH24:MI:SS'),
                          'YYYY-MM-DD'))
  left join (select *
               from (select status from test2) pivot(count(status) for status in ('0' as tab2col1, '1' as tab2col2))) on 1 = 1
------其他解决方案--------------------
来点数据和你的预想结果。不太明白你的描述
------其他解决方案--------------------
tab1
col1Date              其它列
2012-11-01 18:54:29    aaa
2012-11-01 17:12:30    bbb
2012-11-01 05:34:58    sa;dkf;
2012-11-02 07:15:01    ;lkwekre
2012-11-04 12:36:59    429234k;sfd
2012-11-04 15:06:37    lskrfw

tab2
col1Date              status     其它列
2012-11-01 12:15:15    1         kalsjd