@pupupuland (pupupu land)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

複数カラムで値が重複している場合、その中の1レコード(全カラム)取得したい

解決したいこと

SQL Serverで、複数カラムにおいて重複しているレコードを1つのみ残し、全カラム取得したいと思っています。

例えば以下のようなテーブルがあったとします。

AccessTime | UserName | Operation | URL  | EndDate
5/19    | Emi   | FileAccess | https://hhh/f-t/ | 5/20
5/19    | Emi   | FileAccess | https://hhh/f-t/ | 5/19
5/22    | Tako   | FileDownload| https://hhh/fffii | 5/22
5/23    | Oru   | FileDownload| https://hhh/tttii | 5/25
5/23    | Oru   | FileDownload| https://hhh/tttii | 5/24
5/24    | Emi   | Filedeleted | https://hii/tfrio | 5/24

取得したい結果は以下です。
AccessTime | UserName | Operation | URL  | EndDate
5/19    | Emi   | FileAccess | https://hhh/f-t/ | 5/20
5/22    | Tako   | FileDownload| https://hhh/fffii | 5/22
5/23    | Oru   | FileDownload| https://hhh/tttii | 5/25
5/24    | Emi   | Filedeleted | https://hii/tfrio | 5/24

AccessTimeとUserNameとOperationとURLが重複している場合、1レコードのみ残し、重複している値をもつカラム以外も取得したいです。(ここではEndDate。日付の早い遅いは関係なく、重複レコードのうちどれか1つを取得できればよいです)

DISTINCTは全カラムが対象になり、希望の結果になりませんでした。

どなたかお力添えをいただけますと嬉しいです。
よろしくお願いいたします。

0 likes

2Answer

AccessTime~URLの列でGroupByすることで、希望の結果が得られると思います。

0Like

SQLServer 触った事がなく group by の挙動が不明なので動作するか分からないのですが対象テーブルに id フィールドはありませんでしょうか?

select * from tables where id in (
  -- AccessTime, UserName, Operation, URLをグループ化して、一番大きい id を取得
  select
    max(id) as id
  from
    tables
  group by
    AccessTime,
    UserName,
    Operation,
    URL
);


0Like

Your answer might help someone💌