Member 14800672 Ответов: 1

Как вставить несколько записей в новую таблицу в одном операторе select с помощью top1


У меня есть таблица (TABLE1)
Id1 Id2 dateTime
1    1  2020-08-06 10:45:38.017
2    1  2020-08-06 11:45:38.017
3    2  2020-08-06 10:45:38.017
4    3  2020-08-06 11:45:38.017
5    3  2020-08-06 12:45:38.017


я хочу вставить жирные шрифты в новую таблицу(TABLE2) с помощью одного оператора select
поэтому я вставляю последнюю запись для каждого повторения ID2, которое

Новая таблица также имеет те же поля

Что я уже пробовал:

insert into TABLE2 select top 1  table1.Id1,table1.Id2, Table1.dateTime from table1 
where table1.Id2 = table2.Id2 order by DateTime desc


в настоящее время он вставляет одну запись

1 Ответов

Рейтинг:
6

Richard Deeming

TOP 1 указывает SQL Server, что вы хотите вернуть только одну запись, поэтому ваш запрос делает именно то, что вы просили его сделать.

Основываясь на вашем описании, вы хотите что-то вроде:

WITH cte As
(
    SELECT
        Id1,
        Id2,
        [dateTime],
        ROW_NUMBER() OVER (PARTITION BY Id2 ORDER BY [dateTime] DESC) As RN
    FROM
        table1
)
INSERT INTO table2
(
    Id1,
    Id2,
    [dateTime]
)
SELECT
    Id1,
    Id2,
    [dateTime]
FROM
    cte
WHERE
    RN = 1
;
ROW_NUMBER (Transact-SQL) - SQL Server | Microsoft Docs[^]


Member 14800672

Спасибо алут