Запрос только последней записи для каждого пользователя - PullRequest
1 голос
/ 29 февраля 2020

Цель следующего запроса состоит в том, чтобы проверить, был ли пользователь завершен в системе вовремя. Таким образом, есть таблица, которая содержит информацию о прекращении работы системы (как и когда пользователь был прекращен) и таблицу с датой завершения работы пользователя. Поскольку существует три способа удаления пользователя, у некоторых пользователей есть несколько записей завершения. В конце концов, я хочу видеть самую последнюю запись до даты ее прекращения, если она вообще была отменена. Все поля Date являются полями INT.

Текущий запрос:

Select
  B.TerminationApproach,
  B.SystemTerminationDate,
  A.UserName,
  A.LastName,
  A.FirstName,
  A.TerminationDate,
  Case
    When B.SystemTerminationDate <= A.TerminationDate Then 0
    Else 1
  End As EvalCheck
From A
  Left Join B On B.User = A.UserName

Текущий результат:

TerminationApproach SystemTerminationDate   TerminationDate UserNAme LastName   FirstName   EvalCheck
No profiles 20180301    20180226    AWALL   Wall    Aaron   1
Locally locked  20181027    20180226    AWALL   Wall    Aaron   1
Deleted 20180301    20180226    AWALL   Wall    Aaron   1
No profiles 20180301    20180301  CBLAIR    Blair   Carlos  0
Locally locked  20181027    20180301    CBLAIR  Blair   Carlos  1
No profiles 20180301    20180301    CBLAIR  Blair   Carlos  0

Затем существует третья таблица, которая содержит действия пользователя. Мне нужно сопоставить результаты моего первого запроса с пользовательской активностью, чтобы увидеть, выполнил ли пользователь изменения в системе после даты его завершения. Третья таблица выглядит следующим образом:

UserID Date Activity
AWALL 20180227 Table Change

Итак, в моем примере конечный результат моего запроса должен выглядеть следующим образом:

TerminationApproach SystemTerminationDate   TerminationDate UserNAme LastName   FirstName   EvalCheck ActivityAfterTermination
No profiles 20180301    20180226    AWALL   Wall    Aaron   1   Yes
No profiles 20180301    20180301    CBLAIR  Blair   Carlos  0   No

1 Ответ

0 голосов
/ 29 февраля 2020

Ваш вопрос и ваш запрос довольно разобщены. Непонятно, какие столбцы представляют интересующего вас пользователя или дату.

Но основная идея c такова:

with t as (
      <your query here>
     )
select t.*
from (select t.*,
             row_number() over (partition by UserId order by date desc) as seqnum
      from t
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...