#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. Как бы мне добавить условие для выбора последней записи от того же пользователя? Это просто находит разницу во времени с последней записью. Как я могу добавить это условие в подзапрос?