有这样一张表t,字段为 name,ny,danwei,意思大家应该能明白吧?
每月一条数据,我想实现这样一个结果:张三 200001——200210 一队
张三 200307——200506 二队
张三 200507——200703 一队
张三 200704——200802 三队
......其实就是类似个人工作简历,请问如何实现啊?当然,可以指定name='张三'
每月一条数据,我想实现这样一个结果:张三 200001——200210 一队
张三 200307——200506 二队
张三 200507——200703 一队
张三 200704——200802 三队
......其实就是类似个人工作简历,请问如何实现啊?当然,可以指定name='张三'
解决方案 »
- 求一sql语句,
- 超级复杂的SQL语句;求高手
- 关于SQL语句问题
- 1.从Oracle下载学习资料时,提示需要输入用户名和密码。我想询问一下在哪里可以注册帐号呢?2.我发现在删除表的同时,由该表创建的索引、
- CLOB存取问题,急!
- 求助一条sql查询语句
- 依次求002~009,003~009,004~009,005~009,006~009,007~009,008~009 ...........中的最大值
- 向高手求救一个材料分解问题,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 请问有装Oracle 10G For win版本的仁兄么???教教我用法!
- oracle脚本建库的简单问题,某oracle库导出一个.sql文件,现在准备将该文件在另一台机器上恢复,如何操作?
- 刚学oracle,看我这怎么写?
- oracle PL/SQL 问题
select to_char(min(ny),'yyyymm')||'--'||to_char(max(ny),'yyyymm'),danwei from t
where name='张三'
group by danwei
to_char(min(ny), 'yyyymm') || '--' || to_char(max(ny), 'yyyymm'),
danwei
from (select name, ny, to_char(ny, 'yyyymm') - rownum rn, danwei from t)
where name = '张三'
group by rn, name, danwei
order by 2;
to_char(min(ny), 'yyyymm') || '--' || to_char(max(ny), 'yyyymm'),
danwei
from (select name, ny, to_char(ny, 'yyyymm') - rownum rn, danwei from t order by name,danwei,ny)
where name = '张三'
group by rn, name, danwei
order by 2;
WITH t AS
(
SELECT '张三' name, to_date('200001','YYYYMM') ny,'一队' danwei FROM dual UNION ALL
SELECT '张三' name, to_date('200201','YYYYMM') ny,'一队' danwei FROM dual UNION ALL
SELECT '张三' name, to_date('200202','YYYYMM') ny,'二队' danwei FROM dual UNION ALL
SELECT '张三' name, to_date('200301','YYYYMM') ny,'二队' danwei FROM dual UNION ALL
SELECT '张三' name, to_date('200302','YYYYMM') ny,'三队' danwei FROM dual UNION ALL
SELECT '李四' name, to_date('200001','YYYYMM') ny,'一队' danwei FROM dual
)
select a.name,
to_char(a.ny,'YYYYMM') || '--' || to_char(b.ny,'YYYYMM') ny,
a.danwei
from
(select name, min(ny) ny, danwei from t GROUP BY NAME,danwei) a
LEFT JOIN
(select name, MAX(ny) ny, danwei from t GROUP BY NAME,danwei) b
ON a.name = b.name AND a.danwei = b.danwei
group by a.name ,to_char(a.ny,'YYYYMM') || '--' || to_char(b.ny,'YYYYMM') ,a.danwei
order by 1,2,3;
这段代码满足了一半我的需求。
减rownum的想法很妙!有效的实现了统计时间段。但是缺点是ny(年月,6位字符)跨年的时候不是简单的+1,因此这样得到的结果中若是ny跨年,就会是多行,例如,本来是 “张三 200507-200703 一队”,结果却是:
张三 200507-200512 一队
张三 200601-200612 一队
张三 200701-200703 一队
大牛们,能否再想想办法啊?
还是害虫的思路,不过不是减rownum,而是用add_months函数减rownum个月,这样跨年就不存在问题了!