如下A表 记录用户每次动作 mobile time action re_value(返回值)
13631521739 20120915 1(开通) 0(成功)
15143728915 20120915 1(开通) 0(成功)
15143728915 20120915 1(开通) 2(重复开通)
15143728915 20120918 2(注销) 0(成功)
13631521739 20120925 2(注销) 0(成功)
1. 查询在开通四天之内又注销的用户2.查询在开通四天后又注销的用户
13631521739 20120915 1(开通) 0(成功)
15143728915 20120915 1(开通) 0(成功)
15143728915 20120915 1(开通) 2(重复开通)
15143728915 20120918 2(注销) 0(成功)
13631521739 20120925 2(注销) 0(成功)
1. 查询在开通四天之内又注销的用户2.查询在开通四天后又注销的用户
解决方案 »
- oracle在ado.net级别事务为提交之前,不会对表加锁吗?
- 关于写BLOB的问题以及转存BLOB问题(JAVA实现)
- 用exp条件导出多个表
- Oracle数据库的导入和文件同时存放到多个地方的问题,送分
- 跪求一个oracle sql优化
- 如何取得视图的创建语法
- 为什么数据库恢复不了?
- 安装DEVELOPE2000的问题
- 鸡毛信(分不够再加):IMP-00003: ORACLE 错误1658出现 ORA-01658: 无法为表空间TS01_TABLE中的段创建 INITIAL 区
- Oracle 11g(64位)安装失败,显示[INS-20802]Oracle Net Configuration Assistant 失败
- 使用PL/SQL创建数据表时出现缺失右括号和标识符无效的错误,怎么解决?
- 用plsql导出如何导出储存过程,视图,序列等
WITH test (mobile, TIME, ACTION, re_value)
AS (
SELECT '13631521739', '20120915' ,'1', '0'
UNION ALL
SELECT '15143728915', '20120915' ,'1', '0'
UNION ALL
SELECT '15143728915', '20120915' ,'1', '2'
UNION ALL
SELECT '15143728915', '20120918' ,'2', '0'
UNION ALL
SELECT '13631521739', '20120925' ,'2', '0'
)
SELECT mobile,MAX(CASE WHEN ACTION=1 AND re_value=0 THEN time END) [开通时间],MAX(CASE WHEN ACTION=2 THEN time END) [注销时间],
CASE WHEN DATEDIFF(dd,MAX(CASE WHEN ACTION=1 AND re_value=0 THEN time END),MAX(CASE WHEN ACTION=2 THEN time END))<4 THEN '4天内注销' END ,
CASE WHEN DATEDIFF(dd,MAX(CASE WHEN ACTION=1 AND re_value=0 THEN time END),MAX(CASE WHEN ACTION=2 THEN time END))>4 THEN '4天后注销' END
FROM test
GROUP BY mobile
/*
mobile 开通时间 注销时间
----------- -------- -------- --------- ---------
13631521739 20120915 20120925 NULL 4天后注销
15143728915 20120915 20120918 4天内注销 NULL
警告: 聚合或其他 SET 操作消除了 Null 值。
(2 行受影响)
*/
declare @test table (mobile varchar(11), TIME datetime, ACTION varchar(1), re_value varchar(1))
insert into @test
select '13631521739', '20120915' ,'1', '0'
union all
select '15143728915', '20120915' ,'1', '0'
union all
select '15143728915', '20120915' ,'1', '2'
union all
select '15143728915', '20120918' ,'2', '0'
union all
select '13631521739', '20120925' ,'2', '0'
-->测试查询
select
case when datediff(dd,max(case when ACTION=1 and re_value=0 then time end),max(case when ACTION=2 then time end))<4 then'4天内注销' else '4天后注销' end,
mobile
from @test
group by mobile -->测试结果
---------- ------------------------
/*
(无列名) mobile
4天后注销 13631521739
4天内注销 15143728915
*/
oracle 中没有datediff 函数的这种用法吧