Объединение последней записи на основе метки времени

#sql #sql-server-2008 #join

#sql #sql-server-2008 #Присоединиться

Вопрос:

У меня есть журнал доступа, в котором записываются имена пользователей и метки времени в разных точках приложения. Я хочу посмотреть, смогу ли я приблизительно определить количество времени, которое они проводят в приложении. По сути, я хочу присоединить каждую запись к последней записи access на основе метки времени, чтобы я мог определить разницу во времени.

Я не могу придумать, как присоединиться к первой записи, временная метка которой меньше текущей записи. Как это можно сделать?

Комментарии:

1. Какой компонент и версию базы данных вы используете?

2. Упс, забыл об этом. MS-SQL 2008

Ответ №1:

Попробуйте что-то вроде этого:

 SELECT A.UserName, A.EntryDate, DATEDIFF(ss,A.EntryDate, B.EntryDate) SecondsDuration
FROM YourTable A
OUTER APPLY (SELECT MAX(EntryDate) EntryDate
             FROM YourTable
             WHERE UserName = A.UserName AND EntryDate < A.EntryDate) B
  

Комментарии:

1. Похоже, это работает, спасибо. Мне нужно будет прочитать о apply, я никогда раньше этим не пользовался.

Ответ №2:

Я не могу придумать, как присоединиться к первой записи, временная метка которой меньше текущей записи. Как это можно сделать?

Вы почти дали себе ответ:

Должно работать что-то похожее на приведенное ниже:

 SELECT
   lt.*,
   lastentry.timeofEntryColumn,
   DATEDIFF( second, lt.timeofEntryColumn, lt.timeofEtnryColumn) AS DifferenceinSeconds
FROM logTable lt
LEFT OUTER JOIN logtable AS lastentry
ON lastentry.ID = (SELECT TOP 1 ID FROM logtable lt2
          WHERE lt2.timeofEntryColumn < lt.timeofEntryColumn
          ORDER BY lt2.timeofEntryColumn desc)
  

Конечно, вам следует добавить к этому еще кое-что: возможно, условие для внешнего соединения, требующее совпадения идентификатора пользователя…

Комментарии:

1. Как бы мне добавить условие для выбора последней записи от того же пользователя? Это просто находит разницу во времени с последней записью. Как я могу добавить это условие в подзапрос?