【问题标题】:Exclude maximum & minimum values records in oracle排除oracle中的最大值和最小值记录
【发布时间】:2014-05-14 20:21:04
【问题描述】:

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

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

【问题讨论】:

    标签: oracle max minimum


    【解决方案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
    

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

    【讨论】:

    • 我想也可以尝试使用 lag() 和 Lead(),并检测其中一个是否为空。
    • 为了打破僵局,可以使用dense_rank()row_number()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2015-02-04
    • 1970-01-01
    • 2012-04-03
    • 2019-03-18
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多