日期:2014-05-16 浏览次数:20409 次
@Transactional
@Component("statisDAO")
@Scope("prototype")
public class StatisDAO extends AbstractDAO {
private static final String SQL_STATIS_CHANNELTYPE = "INSERT INTO channeltypestatis(uuid,counter,channeltype,accountarea,statistime,statisrange) " +
"SELECT DBMS_RANDOM.STRING('A', 32) AS uuid, count(*) AS counter, channeltype, accountarea,sysdate AS statistime,to_char(?)||'/'||to_char(?) AS STATISRANGE " +
"FROM ACTIVITY WHERE txtime>=? AND txtime<=? GROUP BY ROLLUP (channeltype,accountarea)";
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public boolean statisChanneltype(String startDateStr,String endDateStr) {
try {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate=format.parse(startDateStr+" 00:00:00");
Date endDate=format.parse(endDateStr+" 23:59:59");
Object[] values = {startDateStr,endDateStr,startDate,endDate};
this.getSmartDAO().update("", SQL_STATIS_CHANNELTYPE, values);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("file:E:\\CommonContext.xml");
StatisDAO statisDAO = (StatisDAO) applicationContext.getBean("statisDAO");
System.out.println(statisDAO.statisChanneltype("2011-04-01", "2011-08-02"));
}
}
按日期时长统计:
?
?
统计每个时间段得条目数,txtime是date类型,sql如下:
按小时---select to_char(txtime, 'YYYY-MM-dd hh24') a,count(*) from mytable group by to_char(txtime,'YYYY-MM-dd hh24');
按天---select to_char(txtime, 'YYYY-MM-dd') a,count(*) from mytable group by to_char(txtime,'YYYY-MM-dd');
按月---select to_char(txtime, 'YYYY-MM') a,count(*) from mytable group by to_char(txtime,'YYYY-MM');
按年---select to_char(txtime, 'YYYY') a,count(*) from mytable group by to_char(txtime,'YYYY');
按季度---select to_char(txtime, 'YYYY-q') a,count(*) from mytable group by to_char(txtime,'YYYY-q');
按周---select to_char(txtime, 'ww') a,count(*) from mytable group by to_char(txtime,'ww');
?
参考http://hi.baidu.com/qq5910225/blog/item/4a8c91d7ef0ec514a08bb74e.html
?
同字符串类型统计
?
select
SUM(CASE
WHEN city = '海口市' THEN
1
ELSE
0
END) haikou_num
,SUM(CASE
WHEN city = '广州市' THEN
1
ELSE
0
END) guangzhou_num
FROM ACTIVITY_HIS
decode方式
SQL> select id,num from test1;
ID NUM
---------- ----------
1 3
1 4
2 2
2 5
3 1
3 8
6 rows selected
SQL> select decode(grouping(id),1, '总计 ',id) id,sum(num) num
2 from test1
3 group by rollup(id);
ID NUM
---------------------------------------- ----------
1 7
2 7
3 9
总计 23
<!--StartFragment -->
最终大神:select count(*), province, city from ACTIVITY_HIS where to_char(txtime, 'YYYY-MM-dd')='2011-06-01' group by rollup (province,city);
rollup是数据挖掘中的上卷操作,运行效果截图
?
另外,将取出来得数据直接插入表中:
select ...into 用在存储过程里面的,保存变量
insert ...select 就是插入语句,插入的部分是表中的数据
?
举例来说:
insert 表 select * from 表的方法主要有两种:
1、若两张表完全相同:
insert into table1
select * from table2
where condition(条件)
2、若两张表字段有不同的:
insert into table1(字段1,字段2,字段3....)
select 字段1,字段2,字段3....
from table2
where condition(条件)
上述两种方法均不需要写values.
综上,我的sql是:
INSERT INTO channeltypestatis(uuid,counter,channeltype,accountarea,statistime,statisrange)
SELECT DBMS_RANDOM.STRING(