Я использую Python и SQLite, и я пытаюсь скопировать таблицу в другую таблицу. У меня есть столбец InventoryNbr, а также столбец IndexID. Остальные столбцы при этом не имеют значения ...

2
Lzypenguin 16 Янв 2021 в 19:50

3 ответа

Лучший ответ

Использовать это:

INSERT INTO MasterV2 
SELECT InventoryNbr, MAX(IndexListID), col1, col2, col3, col4, col5, col6, Extra 
FROM Master 
GROUP BY InventoryNbr 

Вышеупомянутый оператор выбора возвращает для каждой InventoryNbr строку с максимальным значением IndexListID, используя преимущества документированной функции SQLite.
Дополнительную информацию можно найти здесь: Обработка простого выбора

1
forpas 16 Янв 2021 в 16:59

Если я правильно понимаю, вы можете использовать оконные функции:

INSERT INTO MasterV2   -- you should list the columns here
    SELECT InventoryNbr, IndexListID, col1, col2, col3, col4, col5, col6, Extra
    FROM (SELECT m.*,
                 ROW_NUMBER() OVER (PARTITION BY InventoryNbr ORDER BY IndexListID DESC) as seqnum
          FROM Master m
         ) m
    WHERE seqnum = 1;

SELECT возвращает одну строку на InventoryNbr. Одна строка - это строка с наибольшим значением IndexListID.

1
Gordon Linoff 16 Янв 2021 в 16:53

Вы можете использовать not exists следующим образом:

INSERT INTO MasterV2
SELECT t.*
  FROM your_table t
 Where not exists
       (Select 1 from your_table tt
         Where tt.InventoryNbr = t.InventoryNbr and tt.IndexListID > t.IndexListID );
0
Popeye 16 Янв 2021 в 17:01
65752078