電子書籍の厳選無料作品が豊富!

(1)CATEGORYで、重複したレコードを除いてユニークにしたい
(2)重複の比較をする際に、大文字・小文字は区別をせずに比較したい
(3)また、前後にスペースが含まれているときはスペースを除いた状態で比較したい
(4)重複しているデータは、CREATE_DATEが新しいものを採用したい
(5)前後にスペースがある場合は、スペースを削除して出力する

SQLを考えてみましたが、(1)と(4)はOKだと思うのですが、それ以外の条件について
LOWERとTRIMを使う事になるかと思いますが、SQL文のどこに追加すれば意図した結果
となるのかが分からない状況です。
-------------------------------------------------------
SELECT A.ID, A.CATEGORY, A.CREATE_DATE
FROM PRODUCT_LIST A,
(SELECT CATEGORY, MAX(CREATE_DATE) as CREATE_DATE
FROM PRODUCT_LIST GROUP BY CATEGORY) B
WHERE A.CATEGORY = B.CATEGORY
AND A.CREATE_DATE = B.CREATE_DATE
-------------------------------------------------------


===============================
■ 元データ
ID CATEGORY CREATE_DATE
===============================
1   aaa   01/01
2   bbb   01/01
3   ccc   01/01
4   ddd   01/01
5   aaa   02/01
6   _bbb   02/01
7   CCC   02/01
===============================

===============================
■ 希望するデータ
ID CATEGORY CREATE_DATE
===============================
4   ddd   01/01
5   aaa   02/01
6   bbb   02/01
7   CCC   02/01
===============================
(※ スペースをアンダーバーで示しています)


よろしくお願いいたします。
(環境はOracle9iです)

A 回答 (2件)

試してないけど、こんな感じでいいかと。



SELECT ID, CATEGORY, CREATE_DATE
FROM
(
SELECT x.*,row_number() over(partition by TRIM(LOWER(CATEGORY)) order by CREATE_DATE desc) R
FROM PRODUCT_LIST x
)
WHERE R=1
    • good
    • 0

select max(id) as id


,max(trim(category)) keep (dense_rank Last order by create_date) as category
,max(create_date) as create_date
from PRODUCT_LIST
group by trim(lower(category))
order by 1


--- 結果 ---
IDCATEGORYCREATE_DATE
4ddd01/01
5aaa02/01
6bbb02/01
7CCC02/01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!