sql - SQL 错误:ROW_NUMBER() OVER (PARTITION
问题描述
我的 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
关键字 this 确实消除了重复 --> (缺点,我完全丢失了 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()
。如果这没有达到目的,那么就用样本数据和期望的结果提出另一个问题。
推荐阅读
- java - 无法激活 weblogic 12c 中的更改
- google-assistant-sdk - 将 Google 语音助手与现有的实时聊天机器人相关联
- python - 有没有办法打开命令提示符并使用 python 脚本执行一些命令?
- aws-lambda - SES 中的邮件节流以增加邮件发送时间
- json - 在控制器之外使用 ASP.NET Core 的 JSON 到模型转换?
- animation - 如何围绕自己的中心旋转 SVG 对象?
- sql - sql查询从重复项中查找缺失值
- winapi - 如何在 Win32 中设置 Emoji 弹出位置
- jquery - 删除功能完成后添加的类 jquery
- python - 无法再运行 pytest,因为 importlib-metadata entry_points() 因 configparser.DuplicateOptionError 而失败