怎么取在规定时间点内的记录

qiaobianhongye 2018-01-30 06:14:41
各位数据库大神,我想请教个问题。我要取时间点在15年1月1号跟15月12月31号用户的岗位信息。比如
,这个员工在15年1月1号跟15月12月31号的岗位都是高级渠道经理助理(社会渠道经理),但是另外一个员工,那么这个员工在在15年1月1号岗位为高级营销代表助理(营业员),在15月12月31号的岗位为高级后台支撑助理。请问这条语句该如何写?以下是建表以及数据
建表
create table TEST01
(
ORG_POST_EMPLOYEE_ID NUMBER not null,
EMPLOYEE_ID NUMBER not null,
BEGIN_DATE DATE not null,
END_DATE DATE,
POST_NAME_REDUNDANCY VARCHAR2(1000)
)
插入数据
insert into test01
values
(510946,
21940575,
to_date('2014-08-01', 'yyyy-MM-dd'),
to_date('2014-09-28', 'yyyy-MM-dd'),
'高级渠道经理助理(社会渠道经理)');

insert into test01
values
(515671,
21940575,
to_date('2014-09-29', 'yyyy-MM-dd'),
to_date('2014-09-30', 'yyyy-MM-dd'),
'高级渠道经理助理(社会渠道经理)');

insert into test01
values
(523853,
21940575,
to_date('2014-10-1', 'yyyy-MM-dd'),
null,
'高级渠道经理助理(社会渠道经理)');

insert into test01
values
(510907,
21940510,
to_date('2014-08-01', 'yyyy-MM-dd'),
to_date('2014-09-30', 'yyyy-MM-dd'),
'高级营销代表助理(营业员)');

insert into test01
values
(523634,
21940510,
to_date('2014-10-01', 'yyyy-MM-dd'),
to_date('2015-11-08', 'yyyy-MM-dd'),
'高级营销代表助理(营业员)');

insert into test01
values
(606872,
21940510,
to_date('2015-11-09', 'yyyy-MM-dd'),
null,
'高级后台支撑助理');
...全文
524 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs_zzh 2018-01-31
  • 打赏
  • 举报
回复
SELECT employee_id, MAX(post_name_redundancy150101), MAX(post_name_redundancy151231)
  FROM (
         SELECT a.employee_id, a.begin_date, nvl(a.end_date, SYSDATE) end_date, a.post_name_redundancy,
                 CASE
                   WHEN DATE '2015-01-01' BETWEEN a.begin_date AND nvl(a.end_date, SYSDATE) THEN
                    a.post_name_redundancy
                 END post_name_redundancy150101,
                 
                 CASE
                   WHEN DATE '2015-12-31' BETWEEN a.begin_date AND nvl(a.end_date, SYSDATE) THEN
                    a.post_name_redundancy
                 END post_name_redundancy151231         
           FROM test01 a)
 GROUP BY employee_id;
ghx287524027 2018-01-31
  • 打赏
  • 举报
回复
使用case when处理每种情况就可以。重要的在于你要将每种情况都考虑到
liu志坚 2018-01-30
  • 打赏
  • 举报
回复
select * from (select t.employee_id,'20150101' as date1 ,t.post_name_redundancy from TEST01 t where t.begin_date<=to_date('20150101','YYYYMMDD') and (t.end_date>to_date('20150101','YYYYMMDD') or t.end_date is null) union all select t.employee_id,'20151231' as date1 ,t.post_name_redundancy from TEST01 t where t.begin_date<=to_date('20151231','YYYYMMDD') and (t.end_date>to_date('20151231','YYYYMMDD') or t.end_date is null) ) tmp order by tmp.employee_id,tmp.date1; 看看是否满足你要求~~~

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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