代码之家  ›  专栏  ›  技术社区  ›  meepmeep

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

  •  2
  • meepmeep  · 技术社区  · 15 年前

    我在SQL Server 2005中有一组包含timeseries数据的表。因此有一个datetime字段和一组值。

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

    不幸的是,datetime字段不是唯一的键,而且似乎有许多datetime值具有多个(不相同的)条目,因此DISTINCT不起作用。

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

    因此,我需要一个select查询,它将每次返回一个带有一个行条目的数据集。我不关心在给定的时间内选择了哪一组值,只要选择了一个(并且只有一个)。

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   LukeH    15 年前

    不需要光标:

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