Sql Получить отличную запись из таблицы с тем же внешним идентификатором и записью даты, которая находится между самой записью и после 3 минут - PullRequest
0 голосов
/ 17 октября 2019

учитывая, что у меня есть эти таблицы записей людей (идентификатор, имя, дата)

  • 1 оценка 2017-10-1 05: 00
  • 1 оценка 2017-10-1 05: 01
  • 1 оценка 2017-10-1 05: 02
  • 1 оценка 2017-10-1 05:03

  • 2Джони 2017-10-1 05: 00

  • 2 Джони 2017-10-1 05: 01
  • 2 Джон 2017-10-1 05: 02
  • 2 joni 2017-10-1 05:03

результат запроса, который я хочу:

  • 1 оценка 2017-10-1 05:03
    • 2 joni 2017-10-1 05: 03

Я хочу получить только две записи (одну для марки и одну для Джони), поскольку они имеют одинаковый идентификатори разница в дате меньше или равна 3 минутам. Как написать этот запрос

Я создал решение, объявив таблицу, вставив в нее все записи, чем цикл в каждой записи, и проверил, есть ли другие записи. которые имеют тот же идентификатор с разницей в 3 минуты, поэтому, если существует, я удаляю эту запись.

, но это решение слишком ли занимает слишком много ресурсов (времени), я ищу лучшее решение

1 Ответ

0 голосов
/ 17 октября 2019

Это запрос sql-сервера. Возможно, вам придется изменить datediff на соответствующую функцию вашей СУБД. Я предполагаю, что вам нужна последняя (как показывает желаемый результат 2017-10-1 05:03) строка с предыдущей строкой в ​​течение 3 минут для данного идентификатора.

select id, name, dt 
from (
  select id, name, dt, row_number() over(partition by id order by dt desc) rn
  from (
    select id, name, dt
      , datediff(minute, lag(dt) over(partition by id order by dt), dt) diff
    from people 
  ) p
  where diff <= 3
) p
where rn=1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...