簡體   English   中英

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

[英]How to find the max value in one column based on the value in another? 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。 請幫助,提前謝謝!!!

您不想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;

有不存在:

select s.*
from summary s
where not exists (
  select 1 from summary
  where repcode = s.repcode and lastupdatedate > s.lastupdatedate
)

您可以嘗試在最大范圍內使用內部聯接

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 

使用GROUP BYHAVING子句:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM