最小功能选择3列

时间:2018-10-10 16:23:36

标签: sql sql-server oracle openquery

我有一条sql语句,我想在其中选择日期的最小值:

SELECT EEEV_EMPL_ID, MIN(EEEV_DT), prev

但是我不想在min中包括prev列,但我希望结果中包含该列。所以说我有

1   3/5/2018    UB3 
1   5/28/2018   4A

其中第一列是员工ID,第二列是日期,第三列是上一个。如果我这样做,将返回两行,因为上一列是不同的。我想只返回带有最小日期的行,而不管prev列是否不同。我该怎么办?

这是完整的声明:

SELECT EEEV_EMPL_ID, EEEV_DT, prev
FROM (
       SELECT EEEV_EMPL_ID, EEEV_DT, EEEV_CCTR_ID,LAG(EEEV_CCTR_ID)          
              OVER(ORDER BY EEEV_EMPL_ID DESC, EEEV_DT DESC) AS prev      
       FROM CDAS.VDWHEEEV1 eeev1 
       WHERE extract(year from eeev1.eeev_dt) = 
             (select extract(year from sysdate) from dual) 
       ORDER BY EEEV_EMPL_ID
     ) x
GROUP BY EEEV_EMPL_ID, prev
ORDER BY EEEV_EMPL_ID

这是一个oracle查询,但是我将在sql服务器的OPENQUERY中使用它。

更新:

好的,所以对于某些人来说还不清楚,让我尝试一下:

00012662    3/5/18     2C
00012662    5/28/18    UB3
00037465    3/19/18    PA
00037465    5/28/18    UB
...

我希望返回这两行。对于每个员工,我都需要最小日期值行。但是因为第三列不同,所以最小日期值将返回每一行。不知道问这个问题有多简单。

00012662    3/5/18     2C
00037465    3/19/18    PA

1 个答案:

答案 0 :(得分:0)

我不确定您想要什么,因为不清楚,但是我的猜测可能是这样的。

SELECT *
FROM 
    (
      SELECT EEEV_EMPL_ID, 
             EEEV_DT, 
             prev, 
             ROW_NUMBER() OVER(PARTITION BY EEEV_EMPL_ID ORDER BY EEEV_DT) theRow
      FROM CDAS.VDWHEEEV1 eeev1 
      WHERE extract(year from eeev1.eeev_dt) = (SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual) 
    ) a
WHERE theRow = 1