sql - Oracle SQL-在一个选择中选择(在同一表上!)

标签 sql oracle select join

因为我不知道如何解释,所以我将尝试解释我将要快速实现的目标!

我们这里有一个表,显示所有雇员的所有雇用历史,我想要当前职位的“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()函数的内联 View 提供了正确的答案:
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>

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

关于sql - Oracle SQL-在一个选择中选择(在同一表上!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558561/

相关文章:

sql - 通过一种条件过滤多列

sql - 我怎样才能重写这些子查询

mysql - SQL表连接问题

oracle - 从oracle sql中的表中获取数据

mysql - 从oracle导入数据到mysql

在一个查询中的两个连接上选择两个计数

jquery - 使用 jquery 动态选择选项

mysql - 顶级 MySQL 统计信息

SQL 选择最大计数

database - 使用 'ODBC' 将 Excel VBA 连接到 oracle DB