Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка по датам  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
DmitryVT
на ум пока приходит цикл или курсор, но саму логику (условие) не представляю как реализовать


зачем так сложно-то? всё что нужно - это заджойнить таблицу саму на себя со смещением по дате...а дальше выводить по условию, где дифф по датам > 15 мин
19 сен 13, 12:46    [14858903]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
Гость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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
DmitryVT
Что то накасячил в условии

Не только в условии, но и при формировании таблицы #TSTS.
19 сен 13, 13:06    [14859031]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
DmitryVT,

А теперь добавьте в тестовые данные ещё одну строку:
INSERT INTO #TEST SELECT '2','2013-09-18 14:45:01.000'

И проверьте ещё раз.
19 сен 13, 13:17    [14859108]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по датам  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Нет, все хорошо я осознаю данное обстоятельство, вопрос заключался в со мой логике поиска а это все подправлю.
Спасибо всем!!!
19 сен 13, 13:21    [14859132]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить