我在考勤表中有以下记录:
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条记录。
答案 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
这假设您的数据不具有联系,或者如果存在联系,则如果它们具有最小(或最大)值,则您希望排除这两个并列行。