[英]SQL select duplicates on specific day
I'm trying to find duplicate entries which occurred on the same day. 我试图在同一天找到重复的条目。 I have a database table which basically consists only from ID, USERNAME and DATE_CREATED.
我有一个数据库表,它基本上只包含ID,USERNAME和DATE_CREATED。
I need a select which does roughly this: 我需要一个大致如此的选择:
SELECT USERNAME,DATE_CREATED
FROM THE_TABLE WHERE {more than one USERNAME exists on date TRUNC(DATE_CREATED)}
Is it possible to do it without creating a procedure only by SELECT? 是否可以在不通过SELECT创建过程的情况下执行此操作? Thanks for advice.
谢谢你的建议。
SELECT USERNAME, TRUNC(DATE_CREATED)
FROM THE_TABLE
GROUP BY
USERNAME, TRUNC(DATE_CREATED)
HAVING COUNT(*) > 1;
Example: 例:
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
*/
To get the full date in the output it is slightly complicated: 要在输出中获取完整日期,这有点复杂:
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
*/
Table has to be accessed twice + DISTINCT keyword is required. 表必须访问两次+ DISTINCT关键字是必需的。 Yes, the performance can decrease.
是的,性能会降低。
This will return the full date in the output. 这将返回输出中的完整日期。
SELECT
USERNAME
, DATE_CREATED
FROM
(
SELECT
USERNAME
, DATE_CREATED
, COUNT( *) over ( PARTITION by USERNAME, TRUNC( DATE_CREATED, 'DD') ) cnt
FROM THE_TABLE
)
WHERE cnt > 1
;
SELECT USERNAME, trunc(DATE_CREATED)
FROM THE_TABLE
group by Username,TRUNC(DATE_CREATED)
having count(1) > 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.