簡體   English   中英

SQL從多行返回MAX值

[英]SQL Return MAX Values from Multiple Rows

我嘗試了許多解決方案,但似乎沒有任何效果。 我正在嘗試返回項目的MAX狀態日期。 如果該項目在同一日期有多個項目,那么我需要返回MAX ID。 到目前為止,我已經嘗試過了:

    SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE
From Project_Status
JOIN
(SELECT MAX(PRJSTAT_PRJA_ID) as MaxID, MAX(PRJSTAT_DATE) as MaxDate
FROM Project_Status
Group by PRJSTAT_PRJA_ID)
On
PRJSTAT_PRJA_ID = MaxID and PRJSTAT_DATE = MaxDate
Order by PRJSTAT_PRJA_ID

它返回以下內容:

結果

我正在獲得PRJSTAT_PRJA_ID的多個記錄,但是我只想返回具有最大PRJSTAT_ID的行。 有什么想法嗎?

在子查詢的ID上取出MAX:

SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE
From Project_Status
JOIN
(SELECT PRJSTAT_PRJA_ID as ID, MAX(PRJSTAT_DATE) as MaxDate
FROM Project_Status
Group by PRJSTAT_PRJA_ID)
On
PRJSTAT_PRJA_ID = ID and PRJSTAT_DATE = MaxDate
Order by PRJSTAT_PRJA_ID

或無需加入:

  SELECT * FROM    
 (SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE, 
 ROW_NUMBER() OVER (PARTITION BY PRJSTAT_PRJA_ID ORDER BY PRJSTAT_DATE DESC)
 AS SEQ,
 ROW_NUMBER() OVER (PARTITION BY PRJSTAT_PRJA_ID ORDER BY PRJSTAT_PRJA_ID
 DESC) AS IDSEQ
 From Project_Status
 )PR
 WHERE SEQ = 1
 AND IDSEQ = 1

你的問題是關系。 您想要每個PRJSTAT_PRJA_ID具有最長日期的記錄,並且如果出現平局,則ID最高的記錄。 對每個組的記錄進行排名並僅保持最佳記錄的最簡單方法是ROW_NUMBER

select prjstat_id, prjstat_prja_id, prjstat_status, prjstat_date
from
(
  select 
    project_status.*,
    row_number() over (partition by prjstat_prja_id 
                       order by prjstat_date desc, prjstat_id desc) as rn
  from project_status
)
where rn = 1
order by prjstat_prja_id;

暫無
暫無

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

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