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

时间:2010-10-21 09:16:45

标签: sql-server tsql

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

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

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

我想从这些表中选择数据,以便插入到一个新的,正确编制索引的表中。

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

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

有什么想法吗?我正在考虑基于PARTITION BY的某种光标,但是超出了这一点。

1 个答案:

答案 0 :(得分:4)

您不需要光标:

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