2

同じ日に発生した重複エントリを見つけようとしています。基本的にID、USERNAME、およびDATE_CREATEDのみで構成されるデータベーステーブルがあります。

おおよそこれを行う選択が必要です:

SELECT USERNAME,DATE_CREATED 
FROM THE_TABLE WHERE {more than one USERNAME exists on date TRUNC(DATE_CREATED)}

SELECTだけで手続きを作らなくてもできるのでしょうか?アドバイスをありがとう。

4

4 に答える 4

6
SELECT  USERNAME, TRUNC(DATE_CREATED)
FROM    THE_TABLE
GROUP   BY
        USERNAME, TRUNC(DATE_CREATED)
HAVING  COUNT(*) > 1;

例:

SELECT  USERNAME, TRUNC(DATE_CREATED)
FROM    
(
        SELECT  'a' username, sysdate date_created from dual union all
        SELECT  'a' username, sysdate date_created from dual union all
        SELECT  'b' username, sysdate date_created from dual union all
        SELECT  'b' username, sysdate date_created from dual
)
GROUP   BY
        USERNAME, TRUNC(DATE_CREATED)
HAVING  COUNT(*) > 1;
/*
a   2013-06-18 00:00:00
b   2013-06-18 00:00:00
*/

出力で完全な日付を取得するには、少し複雑です。

SELECT  DISTINCT
        username
,       date_created
FROM    the_table ot
WHERE   EXISTS
        (
            SELECT  1
            FROM    the_table it
            WHERE   TRUNC(ot.date_created) = TRUNC(it.date_created)
            AND     ot.username            = it.username
            GROUP   BY
                    USERNAME, TRUNC(DATE_CREATED)
            HAVING  COUNT(*) > 1
        )
;
/*
a   2013-06-18 12:48:40
b   2013-06-18 12:48:40
*/

テーブルに 2 回アクセスする必要があります + DISTINCT キーワードが必要です。はい、パフォーマンスが低下する可能性があります。

于 2013-06-18T10:38:30.823 に答える
2
SELECT USERNAME, trunc(DATE_CREATED)
FROM THE_TABLE 
group by Username,TRUNC(DATE_CREATED)
having count(1) > 1
于 2013-06-18T10:40:37.443 に答える
0

使用する

select USERNAME, DATE_CREATED 
from test
group by USERNAME, DATE_CREATED 
Having COUNT(1) > 1
于 2013-06-18T10:44:28.130 に答える