SQL语句按月份查询数据

誰主沉浮丶 2010-07-28 12:05:46
table


ID 回帖用户 回帖时间
1 aaaaaa 2010-5-15 10:20:20
2 bbbbbb 2010-5-16 10:20:20
3 cccccc 2010-5-17 10:20:20
4 dddddd 2010-5-18 10:20:20
5 aaaaaa 2010-5-18 19:29:55
6 aaaaaa 2010-5-18 20:33:42

回帖时间DATE类型
——————————————————————————————

现在需要用一条SQL语句统计出 2010年5月份 回帖总数 以及 回帖用户数。

条件只给出年份以及月份,都是INT类型的,请问保证效率的情况下SQL语句如何写!
...全文
761 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wentihenduo 2011-01-09
  • 打赏
  • 举报
回复
用2楼的code就可以啦
心中的彩虹 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 soft_wz 的回复:]
table


ID 回帖用户 回帖时间
1 aaaaaa 2010-5-15 10:20:20
2 bbbbbb 2010-5-16 10:20:20
3 cccccc 2010-5-17 10:20:20
4 dddddd 2010-5-18 10:20:20
5 aaaaaa 2010-5-18 19:29:55
6 aaaaaa 2010-5-18 20:33:42
……
[/Quote]



select to_char(回帖时间,'yyyy-mm') 月份,count(1) 每月回帖总数,
count(distinct 回帖用户) 回帖用户数
from tb
--加个where to_char(回帖时间,'yyyy-mm')='2010-05' 就是5月的,不加则是每个月的
group by to_char(回帖时间,'yyyy-mm')

Phoenix_99 2010-07-28
  • 打赏
  • 举报
回复
with temp as(
select 1 id,'aaaaaa' userid,to_date('2010-5-15 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 2 id,'bbbbbb' userid,to_date('2010-5-16 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 3 id,'cccccc' userid,to_date('2010-5-17 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 4 id,'dddddd' userid,to_date('2010-5-18 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 5 id,'aaaaaa' userid,to_date('2010-5-18 19:29:55','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 6 id,'aaaaaa' userid,to_date('2010-5-18 20:33:42','yyyy-mm-dd hh24:mi:ss') retime from dual
)
select count(id) 回帖总数,count(distinct userid) 回帖用户数 from temp where to_char(retime,'yyyy-mm')='2010-05'
minitoy 2010-07-28
  • 打赏
  • 举报
回复
写你自己的sql的时候不需要with那段,只要把from后的表替换成你自己的表就可以了。
誰主沉浮丶 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phoenix_99 的回复:]
SQL code
with temp as(
select 1 id,'aaaaaa' userid,to_date('2010-5-15 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
union all
select 2 id,'bbbbbb' userid,to_date('2010-5-16 10:20:20','yyyy-m……
[/Quote]

不明白什么意思,账号全部列出来了?我要是有几十万个用户呢?
baoyongwei 2010-07-28
  • 打赏
  • 举报
回复
回帖时间DATE类型
——————————————————————————————

现在需要用一条SQL语句统计出 2010年5月份 回帖总数 以及 回帖用户数。

条件只给出年份以及月份,都是INT类型的,请问保证效率的情况下SQL语句如何写!
//select count(id) 回帖总数,count(distinct userid) 回帖用户数 from temp where to_char(retime,'yyyy-mm')='2010-05'
根据楼主说的,主要是看重sql效率,条件是整型也没事,就用这个sql可以了。如果觉得效率还是低了,可以写成:
select /*+parallel(a,20)*/count(id) 回帖总数,count(distinct userid) 回帖用户数 from temp a where to_char(retime,'yyyy-mm')='2010-05'

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧