2016-04-04 13 views
0

SQLでは、1つの列に重複する値が存在する可能性のあるテーブルがあります。最新の重複値のみを選択するにはどうすればよいですか?日付は月に広がっているSQLの重複値については、最新の重複値を選択する方法

これは、重複する値を考慮していない私の現在のコードである(注:COLUMN1は、重複する値を持つ列である)

select count(distinct COLUMN1) 
from TABLE 
where extract(month from DATE_COLUMN) = extract(month from sysdate) - 1 
and extract(year from DATE_COLUMN) = extract(year from sysdate) 
and COLUMN1 not like '%X'; 

おかげ

答えて

1

ますサブクエリでROW_NUMBER()関数を使用して、括弧を識別し、それらを日付列でランク付けできます。私は、Oracleに精通していないんだが、それはこのようなものでなければなりません:

SELECT ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY DATE_COLUMN DESC) 

は、説明のために、このリンクをチェックアウト: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

1

をあなたが最新の行を取得するにはROW_NUMBER()分析関数を使用することができますそれぞれの値はcolumn1

SELECT * 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY column1 
          ORDER BY date_column DESC) AS rn 
    FROM table_name 
) 
WHERE rn = 1; 
1

私は示唆したものとは異なる方法でこれをやりました。私は基本的に、2つの異なるテーブル、つまり重複した値と1つの値を持たないテーブルを妥協したテーブルを作成しました。

select DATECOLUMN, count(COLUMN1) 
FROM (select COLUMN1, max(DATECOLUMN) "DATECOLUMN" 
     from TABLE 
     where extract(month from DATECOLUMN) = extract(month from sysdate) - 1 
     and extract(year from DATECOLUMN) = extract(year from sysdate) 
     group by COLUMN1 
     HAVING count(COLUMN1) > 1 
     UNION 
     select COLUMN1, max(DATECOLUMN) "DATECOLUMN" 
     from TABLE 
     where extract(month from DATECOLUMN) = extract(month from sysdate) - 1 
     and extract(year from DATECOLUMN) = extract(year from sysdate) 
     group by COLUMN1 
     HAVING count(COLUMN1) < 2) "NEW_TABLE" 
where COLUMN1 not like '%X' 
group by DATECOLUMN 
order by DATECOLUMN; 
関連する問題