0

我有一个简单的需要,即仅从一个表中的一个特定列(日期)中获取最大值。

这是带有一些示例数据的表(使用 sql server 2000):

EMPLID            EFFDT                  EFF_STATUS   SUPPR_DDP_ADVICE
000619      2007-07-09 00:00:00.000 A   Y
000619      2008-04-04 00:00:00.000 A   Y
000619      2008-04-18 00:00:00.000 A   Y
000622      2013-06-21 00:00:00.000 A   Y

由于每个员工可以有多个EFFDT日期,我希望能够EFFDT为每个员工获得 MAX。

我确实尝试过

SELECT  *
FROM    PS_DIRECT_DEPOSIT
WHERE   EFFDT < (SELECT MAX(EFFDT) FROM PS_DIRECT_DEPOSIT)
AND SUPPR_DDP_ADVICE = 'Y'

但这仍然给了我重复,并且没有返回最大 EFFDT 日期)。感谢协助

4

3 回答 3

0
SELECT EMPLID,EFFDT
FROM(SELECT  EMPLID,
             EFFDT,        
             ROW_NUMBER() OVER (PARTITION BY EMPLID ORDER BY EFFDT DESC) AS number
     FROM PS_DIRECT_DEPOSIT) a
WHERE   number = 1
于 2013-09-17T14:43:08.657 回答
0

为此,我将执行以下操作:

SELECT EMPLID, MAX(EFFDT)
FROM PS_DIRECT_DEPOSIT
WHERE SUPPR_DDP_ADVICE = 'Y'
GROUP BY EMPLID
ORDER BY EMPLID

我不确定 suppr_ddp_advice 是否来自另一个表,但这应该适用于您的情况。

于 2013-09-17T15:47:34.280 回答
0

以下应该有效:

SELECT  a.*
FROM    PS_DIRECT_DEPOSIT a INNER JOIN (SELECT EMPLID, MAX(EFFDT) as MaxDate FROM PS_DIRECT_DEPOSIT GROUP BY EMPLID) b ON a.EMPLID = b.EMPLID and a.EFFDT = b.MaxDate
WHERE SUPPR_DDP_ADVICE = 'Y'

where 子句可能需要进入到连接的结果集的选择中

于 2013-09-17T14:38:55.877 回答