Выравнивание времени ожидания в очереди Damask
/*1 шаг готово*/
UPDATE [Damask-4].[dbo].[Process]
SET DateTime = '2011-11-01 01:11:11'
WHERE DateTime LIKE '%[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%'
/*2 шаг готово*/
UPDATE t1
SET t1.DateTime = t2.DateTime
FROM [Damask-4].dbo.Process t1
JOIN [Damask-4].dbo.Process t2
ON t1.Ticket = t2.Ticket and t2.Event = 14
WHERE t1.DateTime LIKE '2011-11-01 01:11:11'
UPDATE [Damask-4].dbo.Process
SET DateTime = CONVERT(nchar, DATEADD(MI, DATEDIFF(MI, p.DateTime, v.TimeCall)+14, CONVERT(DATETIME, p.DateTime, 120)), 120)
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND DATEDIFF(MI, v.TimeCall, p.DateTime) > 14 AND p.Event = 1
/*EOMONTH(CURRENT_TIMESTAMP, -1) */
OR
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND DATEDIFF(MI, v.TimeCall, p.DateTime) > 14 AND p.Event = 14
/*4 шаг */
UPDATE [Damask-4].dbo.Process
SET [Damask-4].dbo.Process.DateTime = CONVERT(nchar, DATEADD(MI, DATEDIFF(MI, p.DateTime, v.TimeCall)+14, CONVERT(DATETIME, p.DateTime, 120)), 120)
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND p.DateTime < v.TimeCall AND p.Event = 1
/*EOMONTH(CURRENT_TIMESTAMP, -1) */
OR
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND p.DateTime < v.TimeCall AND p.Event = 14
UPDATE [Damask-4].dbo.Process
SET DateTime = CONVERT(nchar, DATEADD(MI, DATEDIFF(MI, p.DateTime, v.TimeCall)+14, CONVERT(DATETIME, p.DateTime, 120)), 120)
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND DATEDIFF(MI, v.TimeCall, p.DateTime) > 14 AND p.Event = 1
/*EOMONTH(CURRENT_TIMESTAMP, -1) */
OR
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND DATEDIFF(MI, v.TimeCall, p.DateTime) > 14 AND p.Event = 14
DELETE p
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE
/*Текущий месц*/
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND p.DateTime < v.TimeCall AND p.Event = 1
/*Предидущий месц*/
/*dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP)-1,0)) < CONVERT(DATETIME, p.DateTime, 120) AND p.DateTime < v.TimeCall AND p.Event = 1*/
/*MSSQL 2012*/
/*EOMONTH(CURRENT_TIMESTAMP, -1) */
OR
dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,CURRENT_TIMESTAMP),0)) < CONVERT(DATETIME, p.DateTime, 120) AND p.DateTime < v.TimeCall AND p.Event = 14
SELECT p.DateTime, p.Ticket, p.Event, v.Ticket, v.TimeCall, DATEDIFF(MI, v.TimeCall, p.DateTime) AS TimeLeft
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE DATEDIFF(MI, v.TimeCall, p.DateTime)>14 AND p.Event=1
ORDER BY p.Ticket
SELECT p.DateTime, p.Ticket, p.Event, v.Ticket, v.TimeCall, DATEDIFF(MI, v.TimeCall, p.DateTime) AS TimeLeft
FROM [Damask-4].dbo.Process p
JOIN [Damask-4].dbo.Terminal v
ON p.Ticket = v.Ticket
WHERE DATEDIFF(MI, v.TimeCall, p.DateTime)>14 AND p.Event=1
ORDER BY p.Ticket