SQL error: ROW_NUMBER() OVER (PARTITION
SQL error: ROW_NUMBER() OVER (PARTITION
我的 SQL 代码有什么问题?
我试图消除此后的重复行 answer
但我不断收到以下错误:
near "(": syntax error: 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:
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 ]
我想以 table 结束,它没有关于 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 因此也可能看起来像:
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;
--> 这会创建一个中间层 table
--> 使用 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()
做的。如果这没有达到目的,请提出另一个问题,提供示例数据和所需的结果。
我的 SQL 代码有什么问题?
我试图消除此后的重复行 answer
但我不断收到以下错误:
near "(": syntax error: 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:
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 ]
我想以 table 结束,它没有关于 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 因此也可能看起来像:
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;
--> 这会创建一个中间层 table
--> 使用 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()
做的。如果这没有达到目的,请提出另一个问题,提供示例数据和所需的结果。