Я унаследовал очень старую и огромную (100M строк) таблицу в SQL Server.Это ежедневный снимок счетов и остатков, но некоторые из этих учетных записей даже больше не меняются, а добавляются каждый день (не спрашивайте почему!)
Я хочу:
Идентификация и удаление неизмененных строк, если нет изменений
Создайте запрос, который даст мне удаленные строки, когда они этого захотят, как если бы они все еще были там
У меня есть таблица измерений даты, которую можно использовать.
Это создает текущую таблицу:
CREATE TABLE #Account_Snapshot(
[Snapshot_Id] [int] NOT NULL,
[Snapshot_Date] [date] NOT NULL,
[Account] [nvarchar](20) NOT NULL,
[Balance] [decimal](18, 2) NOT NULL,
CONSTRAINT [PK_Account_Snapshot_1] PRIMARY KEY CLUSTERED
(
[Snapshot_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO #Account_Snapshot VALUES(1, '2019-01-01', '1', 1505.31)
INSERT INTO #Account_Snapshot VALUES(2, '2019-01-01', '2', 2337.48)
INSERT INTO #Account_Snapshot VALUES(3, '2019-01-01', '3', 1088.07)
INSERT INTO #Account_Snapshot VALUES(4, '2019-02-01', '1', 1505.31)
INSERT INTO #Account_Snapshot VALUES(5, '2019-02-01', '2', 2132.17)
INSERT INTO #Account_Snapshot VALUES(6, '2019-02-01', '3', 1088.07)
INSERT INTO #Account_Snapshot VALUES(7, '2019-03-01', '1', 1505.31)
INSERT INTO #Account_Snapshot VALUES(8, '2019-03-01', '2', 2132.17)
INSERT INTO #Account_Snapshot VALUES(9, '2019-03-01', '3', 749.23)
SELECT * FROM #Account_Snapshot
ORDER BY Account, Snapshot_Date
Snapshot_Id Snapshot_Date Account Balance
----------- ------------- -------------------- ---------------------
1 2019-01-01 1 1505.31
4 2019-02-01 1 1505.31
7 2019-03-01 1 1505.31
2 2019-01-01 2 2337.48
5 2019-02-01 2 2132.17
8 2019-03-01 2 2132.17
3 2019-01-01 3 1088.07
6 2019-02-01 3 1088.07
9 2019-03-01 3 749.23
Мне нужна логика удаления, которая идентифицирует неизмененные строки и удалениесначала их:
DELETE FROM #Account_Snapshot WHERE Snapshot_Id IN (4,6,7,8)
SELECT * FROM #Account_Snapshot
ORDER BY Account, Snapshot_Date
Snapshot_Id Snapshot_Date Account Balance
----------- ------------- -------------------- --------------------
1 2019-01-01 1 1505.31
2 2019-01-01 2 2337.48
5 2019-02-01 2 2132.17
3 2019-01-01 3 1088.07
9 2019-03-01 3 749.23
Затем, когда таблица становится намного меньше, мне нужен запрос для создания представления, возможно, с использованием таблицы измерения даты, чтобы иметь возможность получать результаты на лету.