排除最大值和最大值oracle中的最小值记录

时间:2014-05-14 20:21:05

标签: oracle max minimum

我在考勤表中有以下记录:

Attendance_Date    | Emp_Code
-------------------+-----------
07-FEB-14 08.55.00 | 1681
07-FEB-14 09.05.00 | 1829
07-FEB-14 17.31.00 | 1829
07-FEB-14 17.35.00 | 1681
08-FEB-14 08.54.00 | 1681
08-FEB-14 08.56.00 | 1829
08-FEB-14 17.31.00 | 1681
08-FEB-14 17.31.00 | 1829
08-FEB-14 17.31.00 | 1829

现在需要排除时间和时间最长的记录。每位员工的最短时间戳。结果应仅显示1条记录,如:

Attendance_Date    | Emp_Code
-------------------+----------
08-FEB-14 17.31.00 | 1829

因为emp_code 1829在08年2月8日有3条记录。

1 个答案:

答案 0 :(得分:1)

一个选项是

SELECT attendance_date, emp_code
  FROM (SELECT attendance_date,
               emp_code,
               min(attendance_date) over 
                 (partition by emp_code, trunc(attendance_date)) min_attendance_date
               max(attendance_date) over
                 (partition by emp_code, trunc(attendance_date)) max_attendance_date
          FROM your_table)
 WHERE attendance_date != min_attendance_date
   AND attendance_date != max_attendance_date

这假设您的数据不具有联系,或者如果存在联系,则如果它们具有最小(或最大)值,则您希望排除这两个并列行。