【问题标题】:Select ALL MAX dates for the same ID为同一 ID 选择 ALL MAX 日期
【发布时间】:2022-01-19 05:52:07
【问题描述】:

我为表创建了按 ID 分区的行号。我想为每个 ID 选择 MAX 日期,但有些 MAX 日期是相同的,我也想选择它们。我怎样才能实现这个选择?

原表:

ROW_NUM EMP_ID EMP_ID2 ID DATE
1 568 444 4220 11-25-2020
2 568 501 4220 11-25-2020
3 569 443 4220 11-01-2020
4 510 501 4220 11-12-2020
1 550 411 4221 12-25-2020
2 568 520 4221 12-25-2020
3 410 415 4221 12-25-2020
4 510 591 4221 11-12-2020
1 954 345 4225 09-25-2020
2 568 520 4225 09-25-2020
3 400 789 4225 09-25-2020
4 510 554 4225 09-25-2020
5 210 801 4225 05-12-2020

选择后的表格:

ROW_NUM EMP_ID EMP_ID2 ID DATE
1 568 444 4220 11-25-2020
2 568 501 4220 11-25-2020
1 550 411 4221 12-25-2020
2 568 520 4221 12-25-2020
3 410 415 4221 12-25-2020
1 954 345 4225 09-25-2020
2 568 520 4225 09-25-2020
3 400 789 4225 09-25-2020
4 510 554 4225 09-25-2020

谢谢。

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 我试过这样“ROWNEMBER OVER PARTITION”:SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE) ROW_NUM , MYTABLE.* FROM MYTABLE
  • edit 你对你的问题的尝试。
  • 使用DENSE_RANK() 而不是ROW_NUMBER()
  • 天啊,对不起。我会接受答案。我是这个网站的新手。感谢您的提醒。

标签: sql sql-server tsql


【解决方案1】:

使用RANK 代替ROW_NUMBER

WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY ID ORDER BY DATE DESC) rnk
    FROM yourTable
)

SELECT ROW_NUM, EMP_ID, EMP_ID2, ID, DATE
FROM cte
WHERE rnk = 1
ORDER BY ID;

【讨论】:

    【解决方案2】:

    改用rank

    select * from (
       select rank() over (partition by id order by date desc) rn
       from tablename
    ) t where rn = 1;
    
    

    【讨论】:

      【解决方案3】:

      您始终可以加入子查询:

      SELECT t.*
      FROM my_table t
      LEFT JOIN (SELECT id, MAX(date) AS max_date FROM my_table GROUP BY 1) subq
          ON subq.id = t.id
      WHERE t.date = subq.max_date
      ORDER BY t.id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多