Ошибка SQL: ROW_NUMBER () OVER (PARTITION - PullRequest
0 голосов
/ 06 мая 2018

Что не так с моим кодом 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 мне все равно!)

1 Ответ

0 голосов
/ 06 мая 2018

В 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(). Если этого не произошло, задайте другой вопрос с образцами данных и желаемыми результатами.

...