这样的sql怎么写

问题描述

select t1.ip, count(ip) aanum, d15mi from RPT_BAK_20120512 t1, where t1.type = '2' group by ip,d15mi结果:ip aanum d15mi10.138.250.103 18 20120512001510.136.16.197 8 20120512001510.255.235.223 1 20120512013010.179.185.209 3 20120512013010.137.59.23 10 20120512021510.137.69.234 7 20120512024510.136.222.6 3 20120512024510.136.15.154 2 20120512024510.139.151.42 52 20120512033010.136.19.105 2 20120512033010.4.2.112 2 20120512034510.96.30.36 1 20120512034510.136.35.8 1 20120512034510.196.130.136 1 20120512040010.1236.135.18 4 201205120400现在想要的结果列是dday,ip ,aanum ,mi15,mi30,mi45,mi60dday 为2012051204 这样到小时的时间字段mi15 时间最后两位是 15,mi30 时间最后两位是 30,mi45 时间最后两位是 45,mi60 时间最后两位是 00对于同一个ip在同一个小时里面,mi15,mi30,mi45,mi60 都是有值的求这sql如何写?谢谢。 问题补充:就是把DTIME IP MI15 MI30 MI45 MI602012051211 11.140.18.122 2 2012051211 11.140.18.122 122012051211 11.140.18.122 32012051211 11.140.18.122 4合并到一条记录上去。

解决方案

select substr(t1.d15mi, 0, 10) dtime, ip, sum(case when substr(t1.d15mi, -2) = '15' then 1 end) mi15, sum(case when substr(t1.d15mi, -2) = '30' then 1 end) mi30, sum(case when substr(t1.d15mi, -2) = '45' then 1 end) mi45, sum(case when substr(t1.d15mi, -2) = '00' then 1 end) mi60 from RPT_BAK_20120512 t1 group by ip, substr(t1.d15mi, 0, 10);
解决方案二:
-- sql 很强大,你这个既不用procedure,也不用function即可完成-- 你是要行转列 你的需求建议用sum 和 decode 来完成,以下是个参考select ip, substr(t1.d15mi, 0, 10) dtime, sum(case when substr(t1.d15mi, 11, 2) = '15' then 1 end) mi15, sum(case when substr(t1.d15mi, 11, 2) = '30' then 1 end) mi15, sum(case when substr(t1.d15mi, 11, 2) = '45' then 1 end) mi15, sum(case when substr(t1.d15mi, 11, 2) = '60' then 1 end) mi15 from RPT_BAK_20120512 t1 group by ip, substr(t1.d15mi, 0, 10);
解决方案三:
用我上面的例子,在进行联合查询m15 是一个表 a,m30是一个表 ba.ip=b.ipSELECT t15.m15_ip,t15.mi15,t30.mi30 FROM (SELECT m15_ip, count(create_date) AS mi15 FROM t_test WHERE create_date REGEXP "15$" ) t15, (SELECT m30_ip,count(create_date) AS mi30 FROM t_test WHERE create_date REGEXP "30$" ) t30 where t15.m15_ip = t30.m30_ip时间也是类似,大概就是这么写法,这个语句我没有测试,可能有些细节问题,你自己需修改下 , t15.m15_ip 这个也可以换成t30 的,因为去相同的部分,所以无所谓用那个,当然语句你可以换成inner join
解决方案四:
只能分别统计出来再拼接到一起了:select substr(t.d15min, 0, 10) dtime, t.ip, (select count(1) from RPT_BAK_20120512 mi15 where mi15.ip = t.ip and mi15.d15min = t.d15min and substr(mi15.d15min, 11, 2) = '15') MI15, (select count(1) from RPT_BAK_20120512 mi30 where mi30.ip = t.ip and mi30.d15min = t.d15min and substr(mi30.d15min, 11, 2) = '30') MI30, (select count(1) from RPT_BAK_20120512 mi45 where mi45.ip = t.ip and mi45.d15min = t.d15min and substr(mi45.d15min, 11, 2) = '45') MI45, (select count(1) from RPT_BAK_20120512 mi60 where mi60.ip = t.ip and mi60.d15min = t.d15min and substr(mi60.d15min, 11, 2) = '60') MI60 from RPT_BAK_20120512 t用你上面的数据执行的结果: DTIMEIPMI15MI30MI45MI601201205120110.255.235.22301002201205120110.179.185.20901003201205120210.137.59.2310004201205120210.137.69.234 00105201205120210.136.222.600106201205120210.136.15.15400107201205120310.139.151.4201008201205120310.136.19.10501009201205120310.4.2.11 001010201205120310.96.30.36001011201205120310.136.35.8001012201205120410.196.130.136000013201205120410.1236.135.18000014201205120010.138.250.103100015201205120010.136.16.1971000
解决方案五:
MYSQL 简单的例子ORACLE 不知道支不支持正则SELECT t15.mi15,t30.mi30 FROM (SELECT create_date AS mi15 FROM t_test WHERE create_date REGEXP "15$" ) t15,(SELECT create_date AS mi30 FROM t_test WHERE create_date REGEXP "30$" ) t30查询结果如下+--------------+--------------+| mi15 | mi30 |+--------------+--------------+| 201205120015 | 201205120130 || 201205120015 | 201205120130 || 201205120215 | 201205120130 || 201205120015 | 201205120330 || 201205120015 | 201205120330 || 201205120215 | 201205120330 || 201205120015 | 201205120330 || 201205120015 | 201205120330 || 201205120215 | 201205120330 |+--------------+--------------+
解决方案六:
用sql取不出来的。。。你可以对现在已有的数据用JAVA或者c代码进行分类啊,根据201205120015字符串(或者是Date),分成2012051200和15,放到MAP里,Map<dday,Map<mi,value>>

时间: 2024-09-12 11:06:58

这样的sql怎么写的相关文章

我的CMS开发记-2 该ORM就ORM,该写SQL还是写SQL

啊,是ORM还是SQL,这是个问题. 先扯段题外话,我原来公司的产品是java和.net共存,java部分是外包的,于是么各位也可想而知,两派程序员遇到一块会发生什么事情-____-;;好在大家都是文明人, 口水战之后,各取所需,我也是从他们那里得来的MVC,HIBERNATE等等框架方面的概念,从而才得知世界上还有这样的编程思想.当然他们也被本人惊天地泣鬼神的SQL查询 功力所震惊开发记-2 该ORM就ORM,该写SQL还是写SQL-dos.orm 开发文档">(先吹吹牛再说),无数看似

大神来答-sql 这样写能不能正常执行

问题描述 sql 这样写能不能正常执行 SELECT NOTICE_ID , NOTICE_TITLE , NOTICE_CONTENT , NOTICE_TYPE , M.VALUE NOTICE_TYPE_NAME , to_char(CREATE_TIME,'yyyy-MM-dd HH24:mi:ss') AS CREATE_TIME , to_char(EFFECT_TIME,'yyyy-MM-dd HH24:mi:ss') AS EFFECT_TIME , to_char(EXPIRE

qq用户信息管理-vs2010和SQL 怎么写?

问题描述 vs2010和SQL 怎么写? vs2010 和SQL结合写QQ用户信息管理,swich语句 怎么写,还有那个查询在线天数不太会!!

每分钟平均值的sql-获取一个时刻开始60分钟的,每分钟数据的平均值sql怎么写,mysql的

问题描述 获取一个时刻开始60分钟的,每分钟数据的平均值sql怎么写,mysql的 数据库表中每分钟的数据数量不固定,需要写个sql语句,取一个时刻开始60分钟内的,每分钟数据的平均值sql,求教 解决方案 参考SELECT / GROUP BY - segments of time (10 seconds, 30 seconds, etc) 函数UNIX_TIMESTAMP(createtime)把时间转换成UNIX时间戳,也就是与1970年1月1日的秒数差,因为你是要求按每分钟,所以DIV

ae-AE开发 叠加点检查 判断两个点的距离,判断条件sql怎么写!

问题描述 AE开发 叠加点检查 判断两个点的距离,判断条件sql怎么写! ISpatialFilter spr = new SpatialFilterClass();//空间过滤器 spr.WhereClause = sql; IFeatureCursor featCur = LSMCLayer.Search(spr true);

图片-mysql分段数据统计sql怎么写

问题描述 mysql分段数据统计sql怎么写 , 1. 这是一张班级的成绩表,想统计出每个成绩段的数据,mysql的sql语句该怎么写呢. 解决方案 select '60分以下' type, count(*) from student s where s.score < 60 union all select '60分以上70分以下' type,count(*) from student s where s.score < 70 and s.score > 60 union all se

sql-使用SQL语句写语句查询

问题描述 使用SQL语句写语句查询 1.写函数GetSalaryByNumber,接收员工编号employee_number,返回此员工的工资标准employee_salary. 需要建表Employee,列为:employee_number:varchar(10),employee_salary:money. 解决方案 Create function AvgResult(@en varchar(10)) Returns money As Begin Declare @es money Sele

同样功能的SQL语句 写成参数和写成常量的差别

今天写一个存储过程,由于执行的时间比较长(7秒)所以打算优化一下.结果在优化测试代码中发现如下 一个奇怪的现象. 现在有一个表mis_gl_balance,其中有一个字段ACC_SEGMENT VARCHAR(181) NULL ,他的内容的形式如 下: 3810.105301.5414070180.000000.00000000.0000.000000 另外一个表finance_budget_account 主要记录了budget_type 预算类型和mis_code MIS系统编码.这 里的

同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别

今天写一个存储过程,由于执行的时间比较长(7秒)所以打算优化一下.结果在优化测试代码中发现如下一个奇怪的现象.现在有一个表mis_gl_balance,其中有一个字段ACC_SEGMENT VARCHAR(181) NULL ,他的内容的形式如下:3810.105301.5414070180.000000.00000000.0000.000000另外一个表finance_budget_account 主要记录了budget_type 预算类型和mis_code MIS系统编码.这里的MIS编码就