在同一列中,获取日期差异作为天数

In The Same Column, Get The Date Difference As Days

我写了一个简单的查询,returns 一个人的最后两条出勤记录,下面是它如何工作的示例:

Id      Date
305351  1/24/2018
305351  1/23/2018
E5671   10/12/2014
E5671   10/11/2014

查询:

----Retrieve days from date difference - Starts
SELECT T1.EMPNO,
         T1.ATT_DATE
FROM (
     SELECT T2.EMPNO, T2.ATT_DATE,
            ROW_NUMBER() OVER(PARTITION BY T2.EMPNO ORDER BY T2.ATT_DATE DESC) as rn
            FROM TableName T2 
     )  T1
WHERE T1.rn <= 2
----Retrieve days from date difference - Ends

上面的方法运行良好,现在我正在尝试从日期差异中获取天数。尝试了以下但 returns 两个日期之间的天数不正确,从 JOIN 到员工 ID 的行:

TO_DATE(T1.ATT_DATE) - TO_DATE(T3.ATT_DATE) "DAYS"

预期输出

 Id      Date      Days
305351  1/24/2018  1
305351  1/23/2018  1
E5671   10/12/2014 1
E5671   10/11/2014 1

我猜,在这里犯了一个愚蠢的错误,希望有一个想法让它发挥作用 - 谢谢。

更新 1 - 输出可能如下所示:

预期输出

Id      Date      Days
305351  1/24/2018  1 //(24-01-2018) - (23-01-2018) = Day 1 
E5671   10/12/2014 1 //(12-01-2018) - (11-01-2018) = Day 1

您可以使用 lag()lead()。例如:

SELECT T1.EMPNO, T1.ATT_DATE,
       (T1.ATT_DATE - T1.prev_att_date) as Days
FROM (SELECT T2.*,
             LAG(T2.ATT_DATE) OVER (PARTITION BY t2.EMPNO ORDER BY t2.ATT_DATE) as prev_att_date
             ROW_NUMBER() OVER (PARTITION BY T2.EMPNO ORDER BY T2.ATT_DATE DESC) as rn
      FROM TableName T2 
     )  T1
WHERE T1.rn <= 2;

这会将天数添加到每行的 previous 记录中,因此值不一定相同。您的问题不清楚每一行的值是否应该相同,或者数字是否应该与之前的值相同。