我有一条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
答案 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