不包括最高限额&;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()
可以改为使用。