SQL从多行返回MAX值

时间:2017-06-14 13:46:46

标签: sql oracle

我尝试了很多解决方案,但似乎没有任何效果。我正在尝试返回项目的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

返回以下内容:

Results

我为PRJSTAT_PRJA_ID获取了多条记录,但我只想返回MAX PRJSTAT_ID的行。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

取出子查询上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

答案 1 :(得分:0)

或删除加入的需要:

private void Form1_Load(object sender, EventArgs e)
{
    maind p = new maind();
    p.Nom = txtnom.Text;
    p.Prenom = txtprenom.Text;
    sonep boi = new sonep();
    boi.Insert(p);
}

答案 2 :(得分:0)

你的问题是关系。您希望记录的最大日期为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;