Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.41 KB | None | 0 0
  1. --создать временную таблицу ID для последних активированных платежей
  2. IF OBJECT_ID('tempdb..#old_51') IS NOT NULL
  3.   DROP TABLE #old_51
  4. GO
  5.  
  6. IF OBJECT_ID('tempdb..#last_51') IS NOT NULL
  7.   DROP TABLE #last_51
  8. GO
  9.  
  10. TRUNCATE TABLE SendPayment_test_archive
  11. GO
  12.  
  13. CREATE TABLE #last_51 (
  14.   table_id BIGINT
  15. )
  16. GO
  17. --создать временную таблицу ID для активированных платежей подлежащих архивированию
  18. --
  19.  
  20. CREATE TABLE #old_51 (
  21.   table_id BIGINT
  22. )
  23. GO
  24. --выбираем все последние записи со статусом 51 и копируем talbe_id записей в #last_51
  25. INSERT INTO #last_51
  26.   SELECT
  27.     new.table_ID
  28.   FROM baseSOD.dbo.SendPayment_test new
  29.   LEFT JOIN baseSOD.dbo.SendPayment_test old
  30.     ON (old.cardNumber = new.cardnumber
  31.         AND new.ChangeStatusTime < old.ChangeStatusTime
  32.         AND new.Status = old.Status
  33.       )
  34.   WHERE old.table_id IS NULL
  35.   AND new.Status = 51
  36. GO
  37.   /*
  38. --для отладки
  39. SELECT
  40.   l.table_id last51
  41. FROM #last_51 l
  42. GO
  43.     */
  44. --сопоставляем последние активации со всеми активациями в sendpayment старше 35 дней
  45. INSERT INTO #old_51
  46.   SELECT
  47.     spt.table_ID
  48.   FROM baseSOD.dbo.SendPayment_test spt
  49.   LEFT JOIN #last_51 last
  50.     ON spt.table_ID = last.table_id
  51.   WHERE spt.Status = 51
  52.   AND spt.ChangeStatusTime < DATEADD(DAY, -35, GETDATE())
  53.   AND last.table_id IS NULL
  54. GO
  55.   /*
  56. --для отладки
  57. SELECT
  58.   table_id old51
  59. FROM #old_51
  60. GO
  61. */
  62. --копировать старые записи в архив
  63. SET IDENTITY_INSERT dbo.SendPayment_test_archive ON
  64. GO
  65. INSERT INTO SendPayment_test_archive (table_ID, SystemId, PaymentId, CardNumber, Summ, AgentTime, Status, Accept, ChangeStatusTime)
  66.   SELECT
  67.     spt.table_ID
  68.    ,spt.SystemId
  69.    ,spt.PaymentId
  70.    ,spt.CardNumber
  71.    ,spt.Summ
  72.    ,spt.AgentTime
  73.    ,spt.Status
  74.    ,spt.Accept
  75.    ,spt.ChangeStatusTime
  76.   FROM SendPayment_test spt
  77.   INNER JOIN #old_51
  78.     ON spt.table_ID = #old_51.table_id
  79. GO
  80. SET IDENTITY_INSERT dbo.SendPayment_test_archive OFF
  81. GO
  82.  
  83.   /*
  84. SELECT
  85.   *
  86. FROM baseSOD.dbo.SendPayment_test_archive spta
  87. GO
  88. */
  89. DELETE FROM baseSOD.dbo.SendPayment_test
  90.   WHERE EXISTS  (SELECT o.table_id FROM #old_51 o)
  91. GO
  92. /*
  93. SELECT  *FROM baseSOD.dbo.SendPayment_test spt
  94.   GO
  95.   */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement