SQL-запрос для извлечения разницы во времени - PullRequest
1 голос
/ 22 марта 2012

Мне была делегирована задача в наборе данных, который был предварительно извлечен из другого источника (ов) данных, и в настоящее время у меня есть доступ только для запроса этих данных (Excel для базового анализа данных, поскольку на данный момент меньше, чем предел строки).По сути, у меня есть три соответствующих поля:

FK_ID = произвольное число, связанное с транзакцией

CD = код, связанный с состоянием транзакции (допустим, только значения BEGIN и END являются значениями)

TIMESTAMP = метка времени транзакции

Теперь упрощенный пример этого набора данных:

FK_ID           CD                 TIMESTAMP
000012          END                2012-01-02-14.27.59.133612
000012          BEGIN              2012-01-02-14.27.57.176631
000015          END                2011-12-12-14.27.59.133612
000015          BEGIN              2011-12-11-14.27.59.133612
000019          END                2011-11-10-14.27.59.133612
000019          BEGIN              2011-11-09-14.27.59.133612
000019          END                2011-11-08-14.27.59.133612
000019          BEGIN              2011-11-07-14.27.59.133612

Как видите, это не очень сложно, проблема в том, что мне нужно вычислить метку времениРазница между кодами BEGIN и END для каждого уникального FK_ID, а затем создайте столбец, чтобы подсчитать эту разницу, а также учесть тот факт, что некоторые FK_ID имеют несколько пар временных меток, связанных с BEGIN / END.

Теперь я уполномочен игнорировать случаи, когда существует больше пары (игнорировать, я имею в виду только эту исходную пару), но это не является предпочтительным.

Мне нужно получить этиразличия, чтобы определить общее среднее время, чтобы определить, соответствует ли это время нашим целям приблизительно.

Какой лучший запрос для получения этой разницы меток времени для каждой пары FK_ID или других автоматических средств, которые вы бы предложили?

Я понимаю SQL и достаточно опытен в C #, но временные рамки и другие факторы разрушают мою способность логически решить эту проблему.

1 Ответ

2 голосов
/ 22 марта 2012

Предполагая, что имя таблицы - TABLE1, в Access я бы сделал что-то вроде:

SELECT Table1.FK_ID, DateDiff("s",[TABLE1].[TIMESTAMP],[END_QUERY].[TIMESTAMP]) AS DifferenceInSeconds
FROM Table1 

INNER JOIN 

(SELECT Table1.FK_ID, Table1.CD, Table1.TIMESTAMP
FROM Table1
WHERE (((Table1.CD)="END"))
ORDER BY Table1.FK_ID, Table1.CD) AS END_QUERY 


ON Table1.FK_ID = END_QUERY.FK_ID
WHERE (((Table1.CD)="BEGIN"))
ORDER BY Table1.FK_ID, Table1.CD;

По сути, получить все BEGIN и END в двух подзапросах и получить разницу между запросами (в секундахты не упомянул эту часть).Единственная проблема, с которой вы столкнетесь, состоит в том, что транзакция имеет несколько записей.Вы можете сделать GROUP BY, чтобы получить самый первый BEGIN и самый последний END, но они могут быть с некоторыми несоответствиями.

Надеюсь, это вам немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...