当前位置: 代码迷 >> Oracle管理 >> 请看下小弟我这个统计每天用户注册数并分页的sql哪出毛病了!
  详细解决方案

请看下小弟我这个统计每天用户注册数并分页的sql哪出毛病了!

热度:55   发布时间:2016-04-24 04:30:08.0
请看下我这个统计每天用户注册数并分页的sql哪出毛病了!急
我需要按天统计用户的注册数并分页
没分页的sql的是正确的,
SELECT TO_CHAR(T.CREATETIME,'YYYY-MM-DD') dates,COUNT(*) nums 
from USERACCOUNT T 
WHERE CREATETIME BETWEEN TO_DATE('2013-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-04-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:') 
GROUP BY TO_CHAR(T.CREATETIME,'YYYY-MM-DD') 
ORDER BY dates 


分页:
(select rownum r,t1.* ,TO_CHAR(T1.CREATETIME,'YYYY-MM-DD') dates 
from USERACCOUNT t1 
where rownum<18 AND CREATETIME BETWEEN TO_DATE('2011-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-09-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:')
) t2
where t2.r>15 
GROUP BY dates1 
ORDER BY dates1;

怎么查都不对,报错[Err] ORA-00904: "DATES1": invalid identifier

------解决方案--------------------
引用:
select t2.*,TO_CHAR(t2.dates,'YYYY-MM-DD') dates1 from 

(select rownum r,t1.* ,TO_CHAR(T1.CREATETIME,'YYYY-MM-DD') dates 
from USERACCOUNT t1 
where rownum<18 AND CREATETIME BETWEEN TO_DATE('2011-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-09-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:')
) t2
where t2.r>15 
GROUP BY dates1 
ORDER BY dates1;
这样的也不行

1,GROUP BY dates1 中date1不能是外层查询字段的别名;
2,“select t2.*,TO_CHAR(t2.dates,'YYYY-MM-DD') dates1 from”,除了聚合函数外,select 后只能出现GROUP BY后有的字段
------解决方案--------------------
你想聚合什么字段统计,如果不需要的就直接
select t2.* from 
(select rownum r,t1.* ,TO_CHAR(T1.CREATETIME,'YYYY-MM-DD') dates 
from USERACCOUNT t1 
where rownum<18 AND CREATETIME BETWEEN TO_DATE('2011-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-09-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:')
) t2
where t2.r>15


------解决方案--------------------
引用:
Quote: 引用:

GROUP BY dates1 
date1不能是外层查询字段的别名


select t2.* from 
(select rownum r,t1.* ,TO_CHAR(T1.CREATETIME,'YYYY-MM-DD') dates 
from USERACCOUNT t1 
where rownum<18 AND CREATETIME BETWEEN TO_DATE('2011-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-09-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:')
) t2
where t2.r>15 
GROUP BY dates 
ORDER BY dates;


字查询里别名也不行,而且子查询是能查到信息的,就是不能GROUP BY dates ,提示:[Err] ORA-00979: not a GROUP BY expression

子查询能查到信息是正常的,你这里的GROUP BY报错,你应该再认真看5楼的第二点
------解决方案--------------------
试试这个。。。
select t2.dates1 from (select rownum r,t1.* ,TO_CHAR(T1.CREATETIME,'YYYY-MM-DD') dates1 
from USERACCOUNT t1 
where rownum<18 AND CREATETIME BETWEEN TO_DATE('2011-05-17 13:16:16', 'YYYY-MM-DD HH24:MI:SS:') and TO_DATE('2013-09-23 10:28:42', 'YYYY-MM-DD HH24:MI:SS:')
) t2
where t2.r>15 
GROUP BY dates1 
ORDER BY dates1;
  相关解决方案