不包括最高限额&;oracle中的最小值记录

不包括最高限额&;oracle中的最小值记录,oracle,max,minimum,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

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

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_代码1829在2014年2月8日有3条记录。

一个选项是

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

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

我想您也可以尝试使用lag()和lead(),并检测其中一个是否为空。若要断开关联,请使用
densite\u rank()
row\u number()
可以改为使用。