Sql 在其中使用 row_number 时查询给出错误缺少运算符

Sql Query giving error missing operator while using row_number in it

我正在尝试根据三个不同的列查找唯一的行

这是我编写的查询,但出现错误

Syntax error (missing operator) in query expression 'row_number() OVER ( partition BY F1, F2,F3 order by F1)

这里是查询

SELECT F1, F2, F3 
FROM
   (SELECT  
        *, 
        ROW_NUMBER() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn 
    FROM 
        tblName) a 
WHERE rn = 1

有人可以找出这个查询有什么问题吗?

我在 C# 程序中使用这个查询来使用 oledb 从 Excel sheet 中提取数据。提前致谢。

这是我的 C# 代码

OleDbDataAdapter data = new OleDbDataAdapter(query, conn);
data.Fill(ds);

如果您要求 SQL Sevrer 获取包含您的 3 个不同值的行,那么尝试获取行号并没有多大意义。

假设两行 do 中有相同的 3 个值...它应该是什么行号 return ?

您应该做的是将 RANK()(而不是行号)与 PARTITION 一起使用,并使用“WHERE RANK = 1”过滤器对其进行过滤。

这里有一个很好的例子: RANK

SELECT F1, F2, F3 
FROM
   (SELECT F1, F2, F3, RANK() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn 
    FROM tblName) a 
WHERE rn = 1

但是,当您想要跨行查找 "the most recent something-or-other" 时,RANK() 在按这 3 个不同的值分组后最有用。

如果您只对在 table 中获取不同的 3 值组合列表感兴趣,您会发现只需执行 GROUP BY :

SELECT F1, F2, F3  
FROM tblName
GROUP BY F1, F2, F3  

希望这对您有所帮助。