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 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
希望这能有所帮助。