【问题标题】:SQL - Finding number of duplicate records for a given daySQL - 查找给定日期的重复记录数
【发布时间】:2014-07-22 03:30:37
【问题描述】:

我正在尝试在给定日期查找与提供的名称匹配的重复记录。我已经取得了接近目标的结果。但是此查询提供所有行而不是在给定日期重复的行。

SELECT NameID, DateTime, ROW_Number() over(PARTITION BY NameID, CONVERT(NVARCHAR(25), DateTime, 111) ORDER BY DateTime ASC) DuplicateCount FROM Employee ORDER BY NameID

我只想返回给定日期具有多个 NameID 条目的员工的记录。这是在 Visual Studios 2008 中运行的。我通过数据读取器返回结果并从那里填充列表视图。

基本上,我只是缺少一个只返回 DuplicateCount > 1 记录的元素。如果我可以以这种方式限制结果,我会认为这是一个胜利。

谢谢。

解决方案

显示在给定日期拥有多条记录的员工的姓名 ID、计数和最早日期。

"SELECT sTechID, MIN(Convert(NVARCHAR(25), sDateTime, 10)), COUNT(*) FROM LTI_Scout GROUP BY sTechID, CONVERT(NVARCHAR(25), sDateTime, 111) HAVING COUNT(*) > 1"

【问题讨论】:

  • 您是否尝试过使用带有 HAVING 语句的 Group By 子句?这通常是我查找重复项的方式。

标签: sql vb.net


【解决方案1】:

您是否考虑过结合使用 GROUP BY 和 HAVING 子句?以下是一些可能让您入门的假代码:

Select NameID
FROM TableName
GROUP BY NameID, CONVERT(NVARCHAR(25), DateTime, 111)
HAVING COUNT(*) > 1

【讨论】:

  • 我也需要输出中的 DateTime,但是当我尝试将它添加到 SELECT NameID、DateTime 时,它​​告诉我它无效,因为它不包含在聚合函数或 Group BY 子句中。您能解释一下如何实现这一目标吗?
  • 只需将其添加到Group By子句中:GROUP BY NameID, CONVERT(NVARCHAR(25), DATETIME, 111), DATETIME
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 2023-03-17
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
相关资源
最近更新 更多