我需要从一个表中返回记录id的列表,该表可能/可能没有在同一日期具有该记录ID的多个条目。 相同的日期标准是关键 - 如果记录在09/10/2008有三个条目,那么我需要返回所有三个。 如果记录在09/12/2008只有一个条目,那么我不需要它。

===============>>#1 票数:4

SELECT id, datefield, count(*) FROM tablename GROUP BY datefield
  HAVING count(*) > 1

===============>>#2 票数:2

既然你提到需要所有三个记录,我假设你也想要数据。 如果您只需要id,则只需按查询使用组即可。 要返回数据,只需将其作为子查询加入

select * from table
inner join (
     select id, date
     from table 
     group by id, date 
     having count(*) > 1) grouped 
       on table.id = grouped.id and table.date = grouped.date

===============>>#3 票数:2

最高职位(Leigh Caldwell)不会返回重复记录,需要进行修改。 它将识别重复的密钥。 此外,如果您的数据库不允许group by不包括所有选择字段(许多不包括),则它将不起作用。

如果您的日期字段包含时间戳,那么您需要使用上面记录的方法之一截断它(我更喜欢:dateadd(dd,0,datediff(dd,0,@ DateTime)))。

我认为Scott Nichols给出了正确的答案,这是一个证明它的脚本:

declare @duplicates table (
id int,
datestamp datetime,
ipsum varchar(200))

insert into @duplicates (id,datestamp,ipsum) values (1,'9/12/2008','ipsum primis in faucibus')
insert into @duplicates (id,datestamp,ipsum) values (1,'9/12/2008','Vivamus consectetuer. ')
insert into @duplicates (id,datestamp,ipsum) values (2,'9/12/2008','condimentum posuere, quam.')
insert into @duplicates (id,datestamp,ipsum) values (2,'9/13/2008','Donec eu sapien vel dui')
insert into @duplicates (id,datestamp,ipsum) values (3,'9/12/2008','In velit nulla, faucibus sed')

select a.* from @duplicates a
inner join (select id,datestamp, count(1) as number
              from @duplicates
          group by id,datestamp
            having count(1) > 1) b
       on (a.id = b.id and a.datestamp = b.datestamp)

===============>>#4 票数:2

SELECT RecordID
FROM aTable
WHERE SameDate IN
    (SELECT SameDate
    FROM aTable
    GROUP BY SameDate
    HAVING COUNT(SameDate) > 1)

===============>>#5 票数:1

GROUP BY with HAVING是你的朋友:

select id, count(*) from records group by date having count(*) > 1

===============>>#6 票数:1

select id from tbl where date in
(select date from tbl group by date having count(*)>1)

===============>>#7 票数:1

仅用于匹配日期时间的日期部分:

select * from Table
where id in (
    select alias1.id from Table alias1, Table alias2
    where alias1.id != alias2.id
        and datediff(day, alias1.date, alias2.date) = 0
)

我认为。 这是基于我的假设,你需要在同一天的月份和年份,但不是同一时间,所以我没有使用Group by子句。 从其他帖子看起来我可以更巧妙地使用Having子句。 你可以在一个日期表达中使用having或group by吗?

===============>>#8 票数:1

如果我理解你的问题你可以做类似的事情:

select
     recordID
from
    tablewithrecords as a
    left join (
        select
          count(recordID) as recordcount
        from
          tblwithrecords
        where
          recorddate='9/10/08'
     ) as b on a.recordID=b.recordID
where
     b.recordcount>1

===============>>#9 票数:1

http://www.sql-server-performance.com/articles/dba/delete_duplicates_p1.aspx将帮助你。 另外, http://en.allexperts.com/q/MS-SQL-1450/2008/8/SQL-query-fetch-duplicate.htm

我通过搜索Google搜索“sql重复数据”找到了这些内容。 你会发现这不是一个不寻常的问题。

===============>>#10 票数:1

SELECT * FROM the_table WHERE ROW(record_id,date) IN 
  ( SELECT record_id, date FROM the_table 
    GROUP BY record_id, date WHERE COUNT(*) > 1 )

===============>>#11 票数:1

我不确定我理解你的问题,但也许你想要这样的东西:

SELECT id, COUNT(*) AS same_date FROM foo GROUP BY id, date HAVING same_date = 3;

这只是从我的脑海中写出来的,没有以任何方式进行测试。 阅读GROUP BY和HAVING节在这里 如果这不是您的意思,请忽略此答案。

===============>>#12 票数:1

请注意,如果您使用的是SQL DateTime字段,则需要进行一些额外的处理。 如果你有额外的时间数据,那么你不能只是按原样使用该列。 您必须将DateTime规范化为当天包含的所有记录的单个值。

在SQL Server中,这是一个小技巧:

SELECT CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS DATETIME)

您将DateTime转换为float,它将Date表示为整数部分,将Time表示为传递的一天的分数。 切掉那个小数部分,然后把它再投回到DateTime,你就在那天的开始时有午夜。

===============>>#13 票数:1

SELECT id, count(*)
INTO #tmp
FROM tablename
WHERE date = @date
GROUP BY id
HAVING count(*) > 1

SELECT *
FROM tablename t
WHERE EXISTS (SELECT 1 FROM #tmp WHERE id = t.id)

DROP TABLE tablename

===============>>#14 票数:1

在不知道表格的确切结构或您正在使用的数据库类型的情况下,很难回答。 但是,如果您正在使用MS SQL,并且如果您的真实日期/时间字段具有与同一日期输入记录的时间不同的时间,则此类内容应该起作用:

select record_id, 
       convert(varchar, date_created, 101) as log date, 
       count(distinct date_created) as num_of_entries
from record_log_table
group by convert(varchar, date_created, 101), record_id
having count(distinct date_created) > 1

希望这可以帮助。

===============>>#15 票数:1

TrickyNixon写道;

最高职位(Leigh Caldwell)不会返回重复记录,需要进行修改。

然而,问题不是要求重复记录。 它询问同一日期的重复记录ID ...

GROUP-BY,HAVING对我来说似乎很好。 我以前在生产中使用它。

需要注意的事项:

SELECT ... FROM ... GROUP BY ...具有count(*)> 1

在大多数数据库系统上,将在O(NlogN)时间内运行。 这是一个很好的解决方案。 (选择为O(N),排序为O(NlogN),分组为O(N),具有O(N) - 更糟糕的情况。最佳情况,日期被索引并且排序操作更有效。)

选择......来自...,....其中a.data = b.date

只有白痴做笛卡尔联合。 但是你在看O(N ^ 2)时间。 对于某些数据库,这也会创建一个“临时”表。 当你的桌子只有10行时,这一切都是微不足道的。 但是当桌子长大时会受伤!

Ob链接: http//en.wikipedia.org/wiki/Join_(SQL)

  ask by translate from so

未解决问题?本站智能推荐:

1回复

获取“事件”可能意味着同一日期有多个条目的记录快照

这真的让我感到沮丧。 因此,我正在建立一个数据库来记录人员加入和离开我们办公室以及人员变动的情况,以便跟踪员工人数。 下表简要记录了这一点: FTE是该角色值得担任的全职工作时间的比例(即1是全职,0.5是兼职,等等)。 离开事件记录为将角色更改为0(缺席),将FTE更改为0。
3回复

属于同一日期的条目的总和

我在表中有两列。 Column1包含DateTime条目,而Column2包含营养素条目。 有多个营养元素条目属于同一日期,例如: 如何获得每天的营养价值总和? 例如,对于4/17/2017,我希望值为9,而对于4/18/2017,我希望值为3。
3回复

如果可以在同一日期找到多个记录,如何选择一个值

有人可以建议我改进此子查询,使其仅能基于以下计算获得单个记录,本文下面的子查询带来以下结果: 我只想查看结果中的那些记录,这些记录每个日期都有最新的日期(al.AU_TIME)。 目标是努力处理百分比值为“ 63”的记录。 查询应带来: 因此,如果同一天有多个具有相同REQ_
3回复

在同一日期获取多个庆祝活动-SQL Server

我在sql服务器中有一个雇员数据源,我需要从中检索以下任一条件属于当日的雇员列表 他们的加入日期 他们的结婚日期 他们的出生日期 每个员工记录都有上述信息。 基于这些条件,我需要在查询中连接一个字符串,例如 如果员工“ A”今天庆祝生日,我需要显示“
2回复

sum同一日期记录的时差

执行上面的查询时,得到下表: 如您所见,例如,人名“ amanullah khan”有3条相同日期的记录,即1/30/2013,但是我需要一条记录,如果日期相同,则求和“时差”,我应该得到
1回复

SQL查询-选择同一日期的1条记录

我如何使用查询来过滤掉同一日期的其余记录,并仅获得1条记录。 下面是示例数据库。 预期输出,如果同一日期有两个记录,则仅从源获取“ S”值。
2回复

如何查找同一日期的重复记录

我有一个房间清单表,每个房间每天都有一个记录,但是有些房间每天有两个记录。 我想查询以提取那些ID。 Inventory_table => id,roomid,inv_date ....
2回复

MySQL每组中的最后一条记录,同一日期有多个记录

以下是样本数据 以下是预期的输出 需要根据日期选择每个客户的最新记录,然后选择row_id
1回复

如何避免同一日期?

我有9行,如果我输入相同的日期,则这9行仅由一个“日期”更新,然后显示“日期率已存在” ..我该怎么办..请帮助我。
2回复

在mysql中按唯一日期获取记录

可能重复: 只需要从datetime字段按日期从MySQL数据库获取记录 我的表中有一个added了列,其日期类似于'2011-09-22 00:38:23' ,但是我想按日期(而不是特定于时间)获取数据,那么我该怎么做? 我尝试了这个: 但这没用。