Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
DmitryVT Member Откуда: VRN Сообщений: 192 |
Добрый день господа!! Подскажите пожалуйста каким образом можно реализовать следующий алгоритм: каждый пользователь осуществляет некое действие которое, записывается в таблицу (пример тестовый). Мне необходимо выбрать из таблицы те строки у которых дата превышает 35 мин по отношению к последующей строке CREATE TABLE #TEST (USERS VARCHAR(10),ADDDATE DATETIME) ------------------- INSERT INTO #TEST SELECT '1','2013-09-18 12:00:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:02:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:45:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:46:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:47:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:48:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:55:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:56:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:58:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:59:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:41:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:45:01.000' --------------------- SELECT * FROM #TEST --------------------- DROP TABLE #TEST на ум пока приходит цикл или курсор, но саму логику (условие) не представляю как реализовать |
19 сен 13, 12:41 [14858871] Ответить | Цитировать Сообщить модератору |
DmitryVT Member Откуда: VRN Сообщений: 192 |
Результат запроса должен вернуть: '1','2013-09-18 12:02:01.000' '1','2013-09-18 13:01:01.000' |
19 сен 13, 12:43 [14858882] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
зачем так сложно-то? всё что нужно - это заджойнить таблицу саму на себя со смещением по дате...а дальше выводить по условию, где дифф по датам > 15 мин |
||
19 сен 13, 12:46 [14858903] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
SELECT t.USERS, t.ADDDATE FROM ( SELECT USERS, ADDDATE, LEAD(ADDDATE) OVER(PARTITION BY USERS ORDER BY ADDDATE) AS NEXTDATE FROM #TEST ) t WHERE DATEDIFF(second, t.ADDDATE, t.NEXTDATE) > 35*60 |
19 сен 13, 12:49 [14858920] Ответить | Цитировать Сообщить модератору |
DmitryVT Member Откуда: VRN Сообщений: 192 |
CREATE TABLE #TEST (USERS VARCHAR(10),ADDDATE DATETIME) ------------------- INSERT INTO #TEST SELECT '1','2013-09-18 12:00:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:02:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:45:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:46:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:47:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:48:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:55:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:56:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:58:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:59:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:41:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:45:01.000' --------------------- SELECT ROW_NUMBER() OVER(ORDER BY USERS,ADDDATE ) AS ROW, * INTO #TSTS FROM #TEST DROP TABLE #TEST --------------------- SELECT T1.ROW,T1.USERS,T1.ADDDATE FROM #TSTS as T1 inner join #TSTS as T2 ON T1.ROW = T2.ROW+1 WHERE DATEADD(Minute,35,T1.ADDDATE) < T2.ADDDATE --------------------- DROP TABLE #TSTS Что то накасячил в условии |
19 сен 13, 13:00 [14858997] Ответить | Цитировать Сообщить модератору |
DmitryVT Member Откуда: VRN Сообщений: 192 |
CREATE TABLE #TEST (USERS VARCHAR(10),ADDDATE DATETIME) ------------------- INSERT INTO #TEST SELECT '1','2013-09-18 12:00:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:02:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:45:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:46:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:47:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:48:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:55:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:56:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:58:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:59:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:41:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:45:01.000' --------------------- SELECT ROW_NUMBER() OVER(ORDER BY USERS,ADDDATE ) AS ROW, * INTO #TSTS FROM #TEST DROP TABLE #TEST --------------------- SELECT T1.ROW,T1.USERS,T1.ADDDATE FROM #TSTS as T1 inner join #TSTS as T2 ON T1.ROW = T2.ROW+1 WHERE DATEADD(Minute,35,T1.ADDDATE) < T2.ADDDATE --------------------- DROP TABLE #TSTS Что то накасячил в условии |
19 сен 13, 13:04 [14859015] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Не только в условии, но и при формировании таблицы #TSTS. |
||
19 сен 13, 13:06 [14859031] Ответить | Цитировать Сообщить модератору |
DmitryVT Member Откуда: VRN Сообщений: 192 |
Все получилось !!! СПАСИБО ЗА ПОМОЩЬCREATE TABLE #TEST (USERS VARCHAR(10),ADDDATE DATETIME) ------------------- INSERT INTO #TEST SELECT '1','2013-09-18 12:00:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:02:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:45:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:46:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:47:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:48:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:55:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:56:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:58:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 12:59:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:01:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:41:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:42:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:43:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:44:01.000' INSERT INTO #TEST SELECT '1','2013-09-18 13:45:01.000' --------------------- SELECT ROW_NUMBER() OVER(ORDER BY ADDDATE) AS ROW, * INTO #TSTS FROM #TEST DROP TABLE #TEST SELECT * FROM #TSTS --------------------- SELECT T1.ROW,T1.USERS,T1.ADDDATE,'=',T2.ROW,T2.ADDDATE FROM #TSTS as T1 inner join #TSTS as T2 ON T1.ROW = T2.ROW-1 WHERE DATEADD(Minute,35,T1.ADDDATE) < T2.ADDDATE --------------------- DROP TABLE #TSTS |
19 сен 13, 13:15 [14859096] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
DmitryVT, А теперь добавьте в тестовые данные ещё одну строку: INSERT INTO #TEST SELECT '2','2013-09-18 14:45:01.000' И проверьте ещё раз. |
19 сен 13, 13:17 [14859108] Ответить | Цитировать Сообщить модератору |
DmitryVT Member Откуда: VRN Сообщений: 192 |
Нет, все хорошо я осознаю данное обстоятельство, вопрос заключался в со мой логике поиска а это все подправлю. Спасибо всем!!! |
19 сен 13, 13:21 [14859132] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |