sql-server - 使用 t-sql 选择删除重复值的数据集

标签 sql-server t-sql

我在 SQL Server 2005 中有一组表,其中包含时间序列数据。因此有一个日期时间字段和一组值。

CREATE TABLE [dbo].[raw_data](
    [Time] [datetime] NULL,
    [field1] [float] NULL,
    [field2] [float] NULL,
    [field3] [float] NULL
)

不幸的是,日期时间字段不是唯一的键,并且似乎有很多日期时间值具有多个(不相同)条目 - 因此 DISTINCT 不起作用。

我想从这些表中选择数据插入到一个新的、正确索引的表中。

因此,我想要一个选择查询,该查询将返回每个时间具有单行条目的数据集。我不关心在给定时间内选择哪一组值,只要选择一个(且仅一个)即可。

这些表有很多,所以我没有时间查找并手动清除重复值,因此标准的 HAVING COUNT(*)>1 查询不适用。还有太多重复项,无法完全忽略这些时间值。

有什么想法吗?我正在考虑某种基于 PARTITION BY 的游标,但超出了这一点就陷入了困境。

最佳答案

您不需要光标:

SELECT tmp.*
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY [Time] ORDER BY [Time]) AS RowNum
    FROM raw_data
) AS tmp
WHERE tmp.RowNum = 1

关于sql-server - 使用 t-sql 选择删除重复值的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985918/

相关文章:

sql - 查找第 2 天到最近日期的所有分数

sql - 将字符串转换为具有非标准值的日期时间格式

sql - 如何创建一个使用多个列中不同值的聚合作为参数的表?

sql - 生成唯一名称的性能问题

c# - 重用 SqlCommand?

sql-server - 在 SQL Server 中将 UTC 毫秒转换为 DATETIME

sql - 类似于 TOP 10 的查询来选择中间记录?

sql - 在 SQL Server 2008 中加密数据库表

sql - 为什么系统存储过程在包含所有者的情况下会失败?

sql-server - SSIS 联合全部 vs sql server 联合全部