Замена отрицательных идентификаторов правильными положительными идентификаторами? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть две таблицы, items и items_archive. Оба имеют одинаковые столбцы, и единственные строки, о которых вам нужно беспокоиться, это то, что у них есть строка идентификатора и строка метки времени, которые будут использоваться для упорядочения и замены идентификаторов.

Вот проблема, я недавно восстановил кучу новых строк до items_archive из старых текстовых данных. Эти старые текстовые данные НЕ имели исходных идентификаторов, поэтому я начал просто считать отрицательно, чтобы не влиять на существующие идентификаторы в любой таблице. Однако, не после проверки я вижу, что вещи на самом деле выстраиваются совершенно идеально, и я хочу заменить отрицательные идентификаторы на их правильные.

Вот как выглядит мой текущий запрос и данные -

SELECT * FROM (
SELECT idx,t_stamp, 'items' as src FROM items
UNION
SELECT idx,t_stamp, 'archive' as src FROM items_archive
) as t
ORDER BY t.t_stamp DESC;

дает таблицу, подобную этой

id         t_stamp          src
==================================
1878    2018-09-08 09:54:40 pallets
1877    2018-09-08 09:02:58 pallets
1876    2018-09-07 16:07:45 pallets
-808    2018-09-06 09:53:39 archive
-801    2018-09-05 13:43:52 archive
1873    2018-09-05 13:00:32 archive
-800    2018-09-05 11:48:55 archive
1871    2018-09-05 11:05:13 archive

Очевидно, что -808 должно быть 1875, -801 должно быть 1874, и -800 должно быть 1872. Как я могу добиться этого в массовом масштабе?

Я подумал, может быть, создать еще одну временную таблицу, в которой будут все идентификаторы от минимального до максимального, а также временные метки в порядке, основанном на таблице, которую я только что показал вам. Затем я могу присоединиться к отметкам времени и просто обновить строки в моей архивной таблице. Я могу сделать временную таблицу с t_stamps, но я не знаю, как упорядочить идентификаторы теперь в новом столбце от max до min в порядке отметки времени. Как я могу это сделать?

Или, если есть другой способ думать, пожалуйста, дайте мне знать. Мое подробное ручное наблюдение за этой крошечной таблицей (~ 2 тыс. Строк) показывает, что негативы идеально помещаются на место.

Использование MySQL 5.6.

1 Ответ

1 голос
/ 05 марта 2019

Как вы сказали, создайте временную таблицу с отметкой времени и добавьте столбец порядка / индекса, например,

DENSE_RANK() OVER (Order by t_stamp) as myrank

, затем вы можете сделать ссылку на эту таблицу, чтобы выполнить обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...