【问题标题】:How to get max dates from different columns in same table如何从同一个表的不同列中获取最大日期
【发布时间】:2021-08-24 11:40:10
【问题描述】:

请帮忙。 我有下表:

Accountno TrackNo PercentInc CreateDate Lastdate
123456 396 3 01/03/2019 24/05/2021
123456 516 0.9 20/01/2020 25/06/2020
123456 516 3 01/07/2013 29/10/2021
123456 396 1 12/12/2018 12/05/2018
123456 396 2 05/09/2019 08/11/2019
123456 516 0.4 08/09/2018 30/12/2020

我需要为每个 TrackNo 显示一行结果 - 我必须显示 PercentInc,其中 CreateDate 是最新的,但显示该行的 LastDate 和最大值 (LastDate) 结果:

Accountno TrackNo PercentInc CreateDate Lastdate
123456 396 2 05/09/2019 24/05/2021
123456 516 0.9 20/01/2020 29/10/2021

谢谢

【问题讨论】:

  • 每个TrackNo 一行或每个Accountno 一行或每个AccountNo 一行,TrackNo?过于简单的样本数据不会揭示组定义中的逻辑错误。请注意这两个响应如何做出不同的假设。
  • 答案让我走上了正确的道路,我想出了一个解决方案。确实使用了最大值和子查询。感谢您的帮助

标签: sql sql-server tsql


【解决方案1】:

你可以使用窗口函数:

select Accountno, TrackNo, PercentInc, CreateDate, max_Lastdate
from (select t.*,
             row_number() over (partition by accountno, trackno order by createdate desc) as seqnum,
             max(lastdate) over (partition by accountno, trackno) as max_lastdate
      from t
     ) t
where seqnum = 1;

【讨论】:

    【解决方案2】:

    有很多方法可以用 SQL 给猫剥皮。我觉得很直观的一种方法:

    从这样的查询中获取每个 TrackNo 的最长日期:

    SELECT TrackNo, MAX(CreateDate) MaxCreateDate, MAX(Lastdate) MaxLastDate 
    FROM Table 
    GROUP BY TrackNo
    

    然后使用子查询和两个内部连接将其链接到您想要的两条记录:

    SELECT maxLastDate.Accountno, maxCreateDate.TrackNo, maxCreateDate.PercentInc, maxCreateDate.CreateDate, maxLastDate.Lastdate
    FROM (
        SELECT TrackNo, MAX(CreateDate) MaxCreateDate, MAX(Lastdate) MaxLastDate 
        FROM Table 
        GROUP BY TrackNo
    ) AS maxDates
    INNER JOIN Table AS maxCreateDate 
        ON maxCreateDate.TrackNo = maxDates.TrackNo AND maxCreateDate.CreateDate = maxDates.MaxCreateDate
    INNER JOIN Table AS maxLastDate 
        ON maxLastDate.TrackNo = maxDates.TrackNo AND maxLastDate.Lastdate = maxDates.MaxLastDate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-24
      • 2020-01-04
      • 2019-02-03
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2023-03-23
      • 2023-03-08
      相关资源
      最近更新 更多