Access 2013 Query, DateDiff из последовательных строк TimeStamps - PullRequest
1 голос
/ 23 мая 2019

У меня проблема с успешным завершением (выполнением) запроса к отдельной таблице в Access 2013 с использованием SQL для выполнения Datediff для последовательных / последовательных строк временных отметок, которые отслеживают изменения статуса в билетах, проходящих через нашу систему создания билетов.

Таблица с названием: dbo_Master3_FieldHistory, имеет поле, которое отслеживает метки времени каждый раз, когда меняется статус заявки.К сожалению, он включает в себя только 1 временную метку на изменение, что означает, что по сути он не имеет вторичной временной метки для повторного изменения статуса, поэтому мне нужно запустить DateDiff для расчета AGE для билетов на основе статуса.

Я нашел правдоподобное решение для этого в StackOverflow, ссылка на который приведена ниже.Когда я пытался реализовать это решение, как и с небольшими изменениями, включая корректировки для фильтрации старых данных и определенных полей, оно просто замораживает мою программу Access и никогда не прерывалось (приходится принудительно закрывать Access)

Дата Разница между последовательными строками

'Это базовый код, перенесенный из связанного решения StackOverflow для соответствия полям этой таблицы (как я полагал)

SELECT T.mrID, T.mrSEQUENCE, T.mrUSERID, T.mrFIELDNAME, T.mrNEWFIELDVALUE, T.mrOLDFIELDVALUE, T.mrTIMESTAMP, T.mrNextTIMESTAMP, DateDiff("s",T.mrTIMESTAMP, T.mrNextTIMESTAMP) AS STATUSTIME
FROM ( 

SELECT T1.mrID, T1.mrSEQUENCE, T1.mrUSERID, T1.mrFIELDNAME, T1.mrNEWFIELDVALUE, T1.mrOLDFIELDVALUE, T1.mrTIMESTAMP, 

(SELECT MIN(mrTIMESTAMP)
FROM dbo_MASTER3_FIELDHISTORY AS T2
WHERE T2.mrID = T1.mrID
AND T2.mrTIMESTAMP > T1.mrTIMESTAMP
) As mrNextTIMESTAMP

FROM dbo_MASTER3_FIELDHISTORY AS T1

) AS T

' Этокод, который я хотел использовать, чтобы учесть фильтрацию двух конкретных полей, ограничивая данные билетами (mrID) новее 01.01.2008 и только теми, где mrFIELDNAME имеет значение mrSTATUS

SELECT T.mrID, T.mrSEQUENCE, T.mrUSERID, T.mrFIELDNAME, T.mrNEWFIELDVALUE, T.mrOLDFIELDVALUE, T.mrTIMESTAMP, T.mrNextTIMESTAMP, DateDiff("s",T.mrTIMESTAMP, T.mrNextTIMESTAMP) AS STATUSTIME
FROM ( 

SELECT T1.mrID, T1.mrSEQUENCE, T1.mrUSERID, T1.mrFIELDNAME, T1.mrNEWFIELDVALUE, T1.mrOLDFIELDVALUE, T1.mrTIMESTAMP, 

(SELECT MIN(mrTIMESTAMP)
FROM dbo_MASTER3_FIELDHISTORY AS T2
WHERE mrFIELDNAME = "mrSTATUS"
AND T2.mrID = T1.mrID
AND T2.mrTIMESTAMP > T1.mrTIMESTAMP
) As T1.mrNextTIMESTAMP

FROM dbo_MASTER3_FIELDHISTORY AS T1
WHERE mrFIELDNAME = "mrSTATUS"
AND mrTIMESTAMP >= #1/1/2018#

) AS T;

Access замораживаетсякогда я пытаюсь выполнить эти запросы.Я пробовал несколько способов, но не могу заставить его работать

1 Ответ

1 голос
/ 24 мая 2019

Я смог понять это, спасибо тем, кто нашел время, чтобы прочитать этот интересный вызов.Вместо того, чтобы использовать второй кодовый набор в предоставленной ссылке, я использовал первый, и он работал прекрасно.С некоторыми дополнениями к коду для учета других фильтров / критериев у меня есть результаты, которые мне нужны.


SELECT T1.mrID, T1.mrSEQUENCE, T1.mrUSERID, T1.mrFIELDNAME, T1.mrNEWFIELDVALUE, T1.mrOLDFIELDVALUE, T1.mrTIMESTAMP, MIN(T2.mrTIMESTAMP) AS mrNextTIMESTAMP, DATEDIFF("s", T1.mrTIMESTAMP, MIN(T2.mrTIMESTAMP)) AS TimeInStatus
FROM ((dbo_MASTER3_FIELDHISTORY AS T1 LEFT JOIN dbo_MASTER3_FIELDHISTORY AS T2 ON (T2.mrTIMESTAMP > T1.mrTIMESTAMP) AND (T1.mrID = T2.mrID)) INNER JOIN dbo_MASTER3 AS T4 ON (T4.mrID = T1.mrID))
WHERE T4.mrSUBMITDATE >= #1/1/2018#
AND t1.mrFIELDNAME = "mrSTATUS"
AND NOT T4.mrSTATUS="_Deleted_"
AND NOT T4.mrSTATUS="_SOLVED_"
AND NOT T4.mrSTATUS="_PENDING_SOLUTION_"
GROUP BY T1.mrID, T1.mrSEQUENCE, T1.mrUSERID, T1.mrFIELDNAME, T1.mrNEWFIELDVALUE, T1.mrOLDFIELDVALUE, T1.mrTIMESTAMP
ORDER BY T1.mrID, T1.mrTIMESTAMP;

С уважением, Кристофер

...