-4

私は1つのテーブル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

Id と Statusをgroup by指定すると、期待どおりの出力が得られません。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

1 つの ID に等しいものが 2 つある場合は失敗する可能性がありdatesますが、探している場合はMax発生しないはずです。(または、この場合に行うべきことを知るために、より多くの情報が必要です)

SEデータ

于 2012-07-27T16:54:46.830 に答える