Фильтрация строк по значениям DateTime, которые находятся в пределах 1 минуты - PullRequest
2 голосов
/ 18 августа 2010

У меня есть простая таблица «Логины» с двумя столбцами:

  1. имя пользователя (nvarchar)
  2. зарегистрировано (дата / время)

Это действительно просто, просто записывает имя пользователя и дату и время, когда кто-то входит в мое веб-приложение. Однако иногда люди входят в систему несколько раз за одну минуту ... Я хочу попытаться выполнить запрос, чтобы отфильтровать эти результаты и получить только одну строку, даже если в одну минуту было несколько входов.

Вот пример:

(Результаты, которые я получаю простым выбором)

username  logged
-------------------
kh0013    2010-08-16 21:29:21.020
tmt0006   2010-08-16 21:24:16.030
jrc0014   2010-08-16 21:17:37.187
jrc0014   2010-08-16 21:17:15.043
jrc0014   2010-08-16 21:17:00.593
jrm0017   2010-08-16 20:52:57.673
as0044    2010-08-16 20:45:51.210
snb0006   2010-08-16 20:33:29.873
weo0021   2010-08-16 19:54:57.093

Как видите, пользователь "jrc0014" входил в систему несколько раз в течение одной минуты. Как я могу написать запрос, чтобы пользователь регистрировался только один раз, например:

(желаемые результаты)

username  logged
------------------
kh0013    2010-08-16 21:29:21.020
tmt0006   2010-08-16 21:24:16.030
jrc0014   2010-08-16 21:17:00.593
jrm0017   2010-08-16 20:52:57.673
as0044    2010-08-16 20:45:51.210
snb0006   2010-08-16 20:33:29.873
weo0021   2010-08-16 19:54:57.093

Ответы [ 3 ]

0 голосов
/ 18 августа 2010
select username, logged
  from Logins o
 where not exists(select 1 
                    from Logins i
                   where i.username = o.username
                     and datediff(second, i.logged, o.logged) <= 60)
                 )
0 голосов
/ 18 августа 2010

Чтобы получить вывод, который вы указали, используйте:

  SELECT yt.username , 
         MAX(yt.logged) AS logged
    FROM YOUR_TABLE yt
GROUP BY yt.username, DATEADD(minute,DATEDIFF(minute,0,logged),0)
0 голосов
/ 18 августа 2010

В SQL Server, укажите дату и время до минуты следующим образом:

SELECT DISTINCT
    username , DATEADD(minute,DATEDIFF(minute,0,logged),0) AS logged
    FROM YourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...