我在 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/