-4

我有一张桌子 Abc

Id    Date      status
C01   Jul 3      A
C02   Jul 5      B
C03   Jul 9      A
C02   Jul 9      A
C05   Jul 3      C
C02   Jul 3      C
C03   Jul 12     C
C05   Jul 13     A

我想过滤这个表然后输出...

Id    Date      Status
C01   Jul 3        A
C02   Jul 9        A
C03   Jul 12       C
C05   Jul 13       A
4

2 回答 2

1

如果您的Date列是数据类型日期而不是字符串,这将满足您的要求。

select *
from
  (
  select *,
         row_number() over(partition by Id order by Date desc) as rn
  from Abc
  ) as T
where T.rn = 1

SE-数据

于 2012-07-27T17:01:39.463 回答
0

如果您是group by您的 ID 和状态,您将无法获得预期的输出。您需要获取max date每个 ID,并通过Join

 Select T1.Id, T1.Date, T2.Status from
    (select Id, max(Date) as 'Date'
    from Abc group by Id) T1
    INNER JOIN Abc T2 on T1.Id = T2.Id and T1.Date = T2.Date order by Id asc

如果一个 ID 有两个相等dates,它可能会失败,但如果你正在寻找,Max这不应该发生。(或者我们需要更多信息才能知道在这种情况下要这样做)

SE-数据

于 2012-07-27T16:54:46.830 回答