如何根据另一列中的值找到最大值?的SQL

时间:2019-06-14 19:23:56

标签: sql

我有一张桌子

Repcode  ID     LastUpdateDate
ABCD     ADAMA  12/6/2019
EFG      ERINA  13/6/2019
ABCD     ADAMA  14/6/2019
TOM      TERRY  12/4/2019
SAM      SAMMY  12/6/2019
TOM      SLIPP  24/10/2013
ABCD     BALLP  22/4/2010

对于每个Repcode,我需要基于LastUpdateDate的最新ID。每个RepCode一行

Repcode ID      LastUpdateDate
ABCD    ADAMA   14/6/2019
EFG     ERINA   13/6/2019
SAM     SAMMY   12/6/2019
TOM     TERRY   12/4/2019

Repcode被重复使用,因此基础ID可能会随时间变化。

WITH summary AS (
  SELECT m.*,
         ROW_NUMBER() OVER(ORDER BY m.lastupdatedate DESC) AS rank
    FROM Mtable m
    )

SELECT distinct s.repCode, s.id, LastUpdateDate
  FROM summary s

但是我没有得到像我期望的那样简洁的结果,只是基于最大的lastupdatedate的最新的repcode / id。请帮忙,谢谢!!!

4 个答案:

答案 0 :(得分:2)

您不希望select distinct。您需要一个where子句和一个PARTITION BY子句:

WITH summary AS (
      SELECT m.*,
             ROW_NUMBER() OVER (PARTITION BY m.repcode ORDER BY m.lastupdatedate DESC) AS rank
      FROM Mtable m
     )
SELECT s.repCode, s.id, LastUpdateDate
FROM summary s
WHERE rank = 1;

答案 1 :(得分:0)

不存在:

publish_actions

答案 2 :(得分:0)

您可以尝试在max上使用内部联接

select  m.* 
from  Mtable m
inner join  (

  select  Repcode, ID, max(LastUpdateDate ) max_date 
  from  Mtable 
  group by   Repcode, ID 

  ) t on t.Repcode = m.Repcode 
        and t.id = m.id     
          and t.max_date  = m.LastUpdateDate 

答案 3 :(得分:0)

带有GROUP BYHAVING子句:

SELECT * FROM summary GROUP BY Repcode HAVING MAX(LastUpdateDate)