加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle SQL – 在select中选择(在同一个表中!)

发布时间:2020-12-12 16:26:30 所属栏目:百科 来源:网络整理
导读:我会尝试解释我想要快速实现的目标,因为我不知道如何解释它! 我们这里有一张表格,显示了所有员工的所有工作经历,我想要当前帖子的“Start_Date”(“Current_Flag”=’Y’).除此之外,我想要之前的帖子的“End_Date”(将按当前标记过滤,按结束日期排序,然后抓
我会尝试解释我想要快速实现的目标,因为我不知道如何解释它!

我们这里有一张表格,显示了所有员工的所有工作经历,我想要当前帖子的“Start_Date”(“Current_Flag”=’Y’).除此之外,我想要之前的帖子的“End_Date”(将按当前标记过滤,按结束日期排序,然后抓住顶部日期)

所以无论如何,这是我的代码:

SELECT "Gc_Staff_Number","Start_Date",(SELECT "End_Date"
        FROM   "Employment_History"
        WHERE  "Current_Flag" != 'Y'
               AND ROWNUM = 1
               AND "Employee_Number" = "Employment_History"."Employee_Number"
        ORDER  BY "End_Date" ASC)
FROM   "Employment_History"
WHERE  "Current_Flag" = 'Y'

关于如何使这项工作的任何建议都很棒,希望上面的内容有点意义 – 说实话,此刻的查询甚至不会起作用,真的很糟糕,嗯.

(编辑:哦!我写这个是为了查询一个现有的系统……由于某种原因,桌子周围有所有愚蠢的双引号和字段名称,叹了口气!)

这正是分析拯救的场景.

鉴于此测试数据:

SQL> select * from employment_history
  2  order by Gc_Staff_Number
  3,start_date
  4  /

GC_STAFF_NUMBER START_DAT END_DATE  C
--------------- --------- --------- -
           1111 16-OCT-09           Y
           2222 08-MAR-08 26-MAY-09 N
           2222 12-DEC-09           Y
           3333 18-MAR-07 08-MAR-08 N
           3333 01-JUL-09 21-MAR-09 N
           3333 30-JUL-10           Y

6 rows selected.

SQL>

具有分析LAG()函数的内联视图提供了正确的答案:

SQL> select Gc_Staff_Number
  2,start_date
  3,prev_end_date
  4  from   (
  5      select Gc_Staff_Number
  6,start_date
  7,lag (end_date) over (partition by Gc_Staff_Number
  8                                    order by start_date )
  9                  as prev_end_date
 10,current_flag
 11      from employment_history
 12  )
 13  where current_flag = 'Y'
 14  /

GC_STAFF_NUMBER START_DAT PREV_END_
--------------- --------- ---------
           1111 16-OCT-09
           2222 12-DEC-09 26-MAY-09
           3333 30-JUL-10 21-MAR-09

SQL>

内联视图对于获得正确的结果至关重要.否则,CURRENT_FLAG上的过滤器将删除先前的行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读