· 6 years ago · Mar 21, 2019, 09:02 AM
1--Ñоздать временную таблицу ID Ð´Ð»Ñ Ð¿Ð¾Ñледних активированных платежей
2IF OBJECT_ID('tempdb..#old_51') IS NOT NULL
3 DROP TABLE #old_51
4GO
5
6IF OBJECT_ID('tempdb..#last_51') IS NOT NULL
7 DROP TABLE #last_51
8GO
9
10CREATE TABLE #last_51 (
11 table_id BIGINT
12)
13GO
14--Ñоздать временную таблицу ID Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… платежей подлежащих архивированию
15
16CREATE TABLE #old_51 (
17 table_id BIGINT
18)
19GO
20--выбираем вÑе поÑледние запиÑи Ñо ÑтатуÑом 51 и копируем talbe_id запиÑей в #last_51
21INSERT INTO #last_51
22 SELECT
23 new.table_ID
24 FROM baseSOD.dbo.SendPayment new
25 LEFT JOIN baseSOD.dbo.SendPayment old
26 ON (old.cardNumber = new.cardnumber
27 AND new.ChangeStatusTime < old.ChangeStatusTime
28 AND new.Status = old.Status
29 )
30 WHERE old.table_id IS NULL
31 AND new.Status = 51
32GO
33--ÑопоÑтавлÑем поÑледние активации Ñо вÑеми активациÑми в sendpayment Ñтарше 35 дней
34INSERT INTO #old_51
35 SELECT
36 spt.table_ID
37 FROM baseSOD.dbo.SendPayment spt
38 LEFT JOIN #last_51 last
39 ON spt.table_ID = last.table_id
40 WHERE spt.Status = 51
41 AND spt.ChangeStatusTime < DATEADD(DAY, -35, GETDATE())
42 AND last.table_id IS NULL
43GO
44
45--копировать Ñтарые запиÑи в архив
46SET IDENTITY_INSERT dbo.SendPayment_20161113 ON
47GO
48INSERT INTO SendPayment_20161113 (table_ID, SystemId, PaymentId, CardNumber, Summ, AgentTime, Status, Accept, ChangeStatusTime)
49 SELECT
50 spt.table_ID
51 ,spt.SystemId
52 ,spt.PaymentId
53 ,spt.CardNumber
54 ,spt.Summ
55 ,spt.AgentTime
56 ,spt.Status
57 ,spt.Accept
58 ,spt.ChangeStatusTime
59 FROM SendPayment spt
60 INNER JOIN #old_51
61 ON spt.table_ID = #old_51.table_id
62GO
63SET IDENTITY_INSERT dbo.SendPayment_20161113 OFF
64GO
65
66--так удалÑть данные в таблице Ñ ÐºÐ»Ð°Ñтеризованным индекÑом не очень быÑтро, но проÑто.
67DELETE FROM baseSOD.dbo.SendPayment_test
68WHERE EXISTS (SELECT
69 o.table_id
70 FROM #old_51 o)
71GO