나는 deleieverddate가 저장되는 테이블을 가지고 있습니다. 전달 된 날짜 중 일부는 null이고 그 중 일부는 delievered date가 null 인 수를 계산하고 delieverd date를 건너 뜁니다. 그 사이에 놓친 사람들.Sql이 열 값보다 큰 수를 계산합니다.
deleievered date
NULL
NULL
NULL
횟수가 3
즉해야
즉
NULL
NULL
9/22/2017
NULL
10/22/2017
NULL
카운트 1 여기에 이전의 모든 deievered 날짜가 내가 가진
null가 아닌 건너 뛸 수 있어야 이것을 시도했지만 너무 비싸다.
DECLARE @myTable TABLE
(
MessageId BIGINT ,
ReceiverID VARCHAR(100)
)
DECLARE @mySecondTable TABLE
(
MessageId BIGINT ,
ReceiverID VARCHAR(100),
DeliveredDate DATETIME
)
DECLARE @myLastTable TABLE
(
MessageId BIGINT ,
ReceiverID VARCHAR(100)
)
INSERT INTO @myTable
(MessageId ,
ReceiverID
)
SELECT MAX(MessageID) ,
ReceiverID
FROM dbo.CM_MessageStatus
WHERE ReceiverID IN (SELECT *
FROM string_split(@UserID, ','))
AND DeliveredDate IS NOT NULL
GROUP BY ReceiverID
INSERT INTO @mySecondTable
(MessageId ,
ReceiverID,
DeliveredDate
)
SELECT CM_MessageStatus.MessageID,
dbo.CM_MessageStatus.ReceiverID,
DeliveredDate
FROM dbo.CM_MessageStatus
WHERE DeliveredDate IS NULL AND
ReceiverID IN (SELECT *
FROM string_split(@UserID, ','))
--GROUP BY dbo.CM_MessageStatus.ReceiverID,DeliveredDate
--Now check each userid
declare @ReceiverID NVARCHAR(MAX)
while exists (select * from @mySecondTable)
BEGIN
select top 1 @ReceiverID = ReceiverID
from @mySecondTable
order by ReceiverID ASC
IF EXISTS(SELECT * FROM @myTable WHERE [email protected])
BEGIN
INSERT INTO @myLastTable
(MessageId ,
ReceiverID
)
SELECT MessageID,
@ReceiverID
FROM @mySecondTable
WHERE DeliveredDate IS NULL
AND MessageId > (SELECT
MessageId
FROM
@myTable
WHERE
ReceiverID = @ReceiverID
)
AND [email protected]
--GROUP BY ReceiverID
END
ELSE
BEGIN
INSERT INTO @myLastTable
(MessageId ,
ReceiverID
)
SELECT MessageID ,
ReceiverID
FROM @mySecondTable
WHERE DeliveredDate IS NULL
AND [email protected]
END
delete @mySecondTable
where ReceiverID = @ReceiverID
END
SELECT COUNT(MessageId) AS MessageId,ReceiverID FROM @myLastTable
GROUP BY ReceiverID
너무 많은 비용이 드는 80 초에는 35 초가 걸렸는데, 어떻게 하나의 선택으로이 작업을 수행 할 수 있습니까? 노력은 그 문제에 대한 몫이다.
기록의 순서는이 논리에 매우 중요해 보입니다. 주문을 어떻게 결정합니까? – JNevill
나는 방향을 주문하지 않습니까? – bilal
데이터의 순서는 무엇입니까? 납기일은 항상 이전 행보다 큽니 까? 그렇지 않다면 ID 열 또는 데이터 시퀀스를 나타내는 항목이 있습니까? 메시지 아이디와 같을까요? – scsimon