我在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的某种光标,但是超出了这一点。
答案 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