Как я могу получить 2-й ряд для всех пользователей - PullRequest
0 голосов
/ 17 мая 2019

У меня есть TempTable с таблицей настройки Empname SwipeTime и описанием, показанным ниже

Mike 2019-05-17 12:00:16.383 User Granted Exit From Door Using Reading Device 
Mike 2019-05-17 12:36:11.753 User Granted Entry To Door Using Reading Device
John 2019-05-17 12:00:16.383 User Granted Exit From Door Using Reading Device 
John 2019-05-17 12:36:11.753 User Granted Entry To Door Using Reading Device
Steve 2019-05-17 12:00:16.383 User Granted Exit From Door Using Reading Device 
Steve 2019-05-17 12:36:11.753 User Granted Entry To Door Using Reading Device

как мне получить самую новую запись для каждого сотрудника, в то время как у всех разное время пролистывания и описания.

SELECT Distinct
    MAX(EmployeeName) AS EmployeeName,
    MAX(SwipeTime) AS MaxSwipeTime,
    Description
FROM #WhosInOut
GROUP BY EmployeeName,Description, SwipeTime
ORDER BY  EmployeeName, MAX(SwipeTime) ;

Я хотел бы получить список всех пользователей с самой новой записью, независимо от того, является ли она выходом или записью

Ответы [ 4 ]

1 голос
/ 17 мая 2019

Я думаю, что вы хотите row_number():

select t.*
from (select t.*, row_number() over (partition by employeename order by swipetime desc) as seq
      from #WhosInOut t
     ) t
where seq = 1;
0 голосов
/ 17 мая 2019

Вы можете использовать функцию row_number для извлечения самых последних как таковых:

select x.empname, x.swipetime, x.description
from (
select a.empname, a.swipetime, a.description, ROW_NUMBER() (over partition by a.empname order by a.swipetime desc) as Ranks
from #whosinout a) x
where ranks = 1
0 голосов
/ 17 мая 2019

При желании будет работать коррелированный подзапрос:

SELECT EmployeeName, SwipeTime, Description
FROM #WhosInOut t1
WHERE SwipeTime = (SELECT MAX(SwipeTime) FROM #WhosInOut WHERE t1.EmployeeName = EmployeeName)
0 голосов
/ 17 мая 2019

Вы можете сделать подзапрос:

SELECT a.*, b.Description
FROM
    (SELECT Distinct
        EmployeeName EmployeeName,
        MAX(SwipeTime) AS MaxSwipeTime  
     FROM #WhosInOut
     GROUP BY 1)a
JOIN #WhosInOut b
 ON a.EmployeeName = b.EmployeeName and a.MaxSwipeTime = b.SwipeTime
ORDER by EmployeeName, MaxSwipeTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...