Sql查询中使用row_number时出现错误,缺少运算符

本文关键字:错误 运算符 number 查询 row Sql | 更新日期: 2023-09-27 18:01:08

我正试图基于三个不同的列找到唯一的行

这是我写的查询,但我得到了一个错误

查询表达式'row_number((OVER中存在语法错误(缺少运算符((分区BY F1、F2、F3按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工作表中提取数据。提前谢谢。

这是我的C#代码

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

Sql查询中使用row_number时出现错误,缺少运算符

如果您要求SQL Sevrer获取具有3个不同值的行,那么尝试获取行号是没有意义的。

假设两行do中有相同的3个值。。。它应该返回什么行号?

您应该使用RANK()(而不是行号(和PARTITION,并使用"WHERE RANK = 1"过滤器进行过滤。

这里有一个很好的例子:等级

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

然而,当您想在行之间找到"最新的东西或其他东西"时,RANK()最有用,因为它们已经按这三个目标值分组。

如果你感兴趣的只是在表中获得一个不同的3值组合列表,你会发现只做GROUP BY:更简单

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

希望这能有所帮助。