当前位置: 首页 > 面试题库 >

SQL错误:ROW_NUMBER()个OVER(部分

徐杰
2023-03-14
问题内容

我的SQL代码有什么问题?

我试图消除此答案之后的重复行

但是我一直收到以下错误:

在“(”附近:语法错误:SELECT rn = ROW_NUMBER()OVER(

这是SQL代码

SELECT 
    rn = ROW_NUMBER() OVER (PARTITION BY s.stop_id, s.stop_name 
                            ORDER BY s.stop_id, s.stop_name)
FROM stops s

我在某处读到它与SQL版本或sqlite3的用法有关?

这里是一些其他有关该问题的信息:

我有一张开始的桌子:

table_beginning =
[some_text0 , some_text1 , some_text2 ,  some_text3   ]
[ bla_1     ,   monday   ,    red     , bla_something ]
[ bla_77    ,   tuesday  ,   green    , bla_other     ]
[ bla_99    ,   monday   ,    blue    , bla_anything  ]
[ bla_00    ,  wednesday ,    red     , bla_maybe     ]
[ bla_55    ,   monday   ,   violet   , bla_more      ]
[ bal_66    ,   monday   ,    red     , bla_kind      ]
[ bal_22    ,   monday   ,    red     , bla_stuff     ]

我想最后得到一个没有关于col_2和col_3的复数的表(不关心col_1和col_4是什么!)

如:

table_final1 =
[some_text0 , some_text1 , some_text2 ,  some_text3   ]
[ bla_1     ,   monday   ,    red     , bla_something ]
[ bla_77    ,   tuesday  ,   green    , bla_other     ]
[ bla_99    ,   monday   ,    blue    , bla_anything  ]
[ bla_00    ,  wednesday ,    red     , bla_maybe     ]
[ bla_55    ,   monday   ,   violet   , bla_more      ]

(->被踢出的哪一行都没有关系。因此,最终表也可能看起来像:

table_final2 =
[some_text0 , some_text1 , some_text2 ,  some_text3   ]
[ bla_77    ,   tuesday  ,   green    , bla_other     ]
[ bla_99    ,   monday   ,    blue    , bla_anything  ]
[ bla_00    ,  wednesday ,    red     , bla_maybe     ]
[ bla_55    ,   monday   ,   violet   , bla_more      ]
[ bal_66    ,   monday   ,    red     , bla_kind      ]

或者

table_final3 =
[some_text0 , some_text1 , some_text2 ,  some_text3   ]
[ bla_77    ,   tuesday  ,   green    , bla_other     ]
[ bla_99    ,   monday   ,    blue    , bla_anything  ]
[ bla_00    ,  wednesday ,    red     , bla_maybe     ]
[ bla_55    ,   monday   ,   violet   , bla_more      ]
[ bal_22    ,   monday   ,    red     , bla_stuff     ]

重要的是col_2和col_3永远不会有相同的两个条目!

如您所见some_text1 = monday AND some_text2 = red,现在仅存在一次!(从只查看col_2和col_3的角度来看,消除了重复项)

从col_1和col_4中的内容开始,我根本不在乎其中的内容!我只关心col_2和col_3的内容(那里没有任何复数形式!)

一种解决方案:

我想出了一种方法(但也许有一种更优雅的方法?)

CREATE TABLE table_intermediate AS
  SELECT DISTINCT col_2, col_3
FROM table_beginning;

->这将创建一个中间表->使用DISTINCT关键字它将消除重复项->(缺点是,我完全松散了col_1和col_4信息)

也许有一种解决方案,可以在col_1和col_4上保留信息?(同样,我不在乎col_1或col_4中的哪一个!)


问题答案:

在SQLite中,通常可以使用rowid

select s.*
from stops s
where s.rowid = (select min(s2.rowid)
                 from stops s2
                 where s2.stop_id = s.stop_id and s2.stop_name = s.stop_name
                );

我不确定这是否是您真正需要的。但这似乎就是您想要处理的row_number()。如果没有解决问题,请询问另一个有关示例数据和所需结果的问题。



 类似资料:
  • 问题内容: 我需要使用以下查询创建group by子句: 但我想在左边的一栏返回我:1、2、3、4、5等。在MSSql中我会做 这可能吗? 问题答案:

  • 问题内容: 我有一张桌子: 我想在我的查询输出中增加一列: 困难的部分是B,如果B彼此相邻,我希望它具有相同的顺序,如果不是,则视为新行。 我知道 他们都不符合我想要的条件。有没有办法查询这个? 问题答案: 您想查看停靠点是否在一行和下一行之间改变。如果是这样,您要增加序列。因此,请使用lag将上一个停靠点移至当前行。 我之所以使用DECODE是因为它处理NULL的方式,并且比CASE更为简洁,但

  • 问题内容: 我有一个示例输入表 我也有一个理货桌子如下 在Sql Server 2005中,如果我这样做 我得到的输出为 我只能使用Sql Server2000。如何获得相同的输出? 我尝试过 但是输出错误 问题答案: 使用此查询: 它产生所需的输出:

  • 问题内容: 我需要合作,需要一些帮助。 我有两个表TbProjectTeam和TbProjectList。我需要比较员工离职日期和项目开始日期。我使用了这种语法: 我的目标是在TbSeznamUkolu替换1。[ID] = 1所表达的东西作为在。不支持此功能,但不幸的是,我需要了解所有项目的行索引。我想这将显示匹配每一行的员工。 谁能帮我吗?十分感谢。 问题答案: MS Access具有 自动编号

  • 问题内容: 好的,因此基本上我通过使用变得无用,我需要避免这种情况,因为这会导致重复的结果(当然,除了唯一的数字!) 因此,我要寻找的是一个查询,该查询将保持相​​同,但没有重复的行,因为num是唯一的: 修复起来可能很琐碎,但由于我不是SQL Server专家,所以我不习惯这些内部查询等。 更新:是的,num用于分页。 问题答案: 好像我晚两年我最近的博客帖子大约是到什么是对。您的CTE必须替换

  • 问题内容: 我正在处理一些Web点击数据,只是在查找带有访问的user_id(按时间戳记)的最新page_name。使用以下代码,将重复user_id,并显示page_name,并以降序排列。但是,我只希望last_click总是=1。完成后的查询将用作较大查询中的子查询。 这是我当前的代码: 问题答案: 您应该能够将查询移至子查询并添加条件: