Отображение онлайн-пользователей в системе - PullRequest
0 голосов
/ 19 июня 2020

Не знаю, где именно ошибаюсь, но мне нужен список всех рабочих, которые в данный момент на работе (на текущий день), это мой sql запрос:

SELECT
    zp.ID, 
    zp.USER_ID, 
    zp.Arrive, 
    zp.Deppart, 
    zp.DATUM
FROM time_recording as zp 
INNER JOIN personal AS a on zp.USER_ID, = zp.USER_ID, 
WHERE zp.Arrive IS NOT NULL 
AND zp.Deppart IS NULL 
AND zp.DATUM = convert(date, getdate())
ORDER BY zp.ID DESC

вот как данные выглядят в моем запросе: enter image description here

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

enter image description here

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Попробуйте этот сценарий ниже, используя ROW_NUMBER, как показано ниже -

SELECT * FROM 
(
    SELECT zp.ID, zp.USER_ID, zp.Arrive, zp.Deppart, zp.DATUM,
    ROW_NMBER() OVER(PARTITION BY zp.User_id ORDER BY zp.Arrive DESC) RN
    FROM time_recording as zp 
    INNER JOIN personal AS a 
    on zp.USER_ID = zp.USER_ID
    -- You need to adjust above join relation as both goes to same table
    -- In addition, as you are selecting nothing from table personal, you can drop the total JOIN part
    WHERE zp.Arrive IS NOT NULL 
    AND zp.Deppart IS NULL 
    AND zp.DATUM = convert(date, getdate())
)A
WHERE RN =1
0 голосов
/ 19 июня 2020

вы можете попробовать это:

SELECT DISTINCT
   USER_ID,
   LAR.LastArrive
   FROM time_recording as tr
CROSS APPLY (
    SELECT 
       MAX(Arrive) as LastArrive 
    FROM time_recording as ta
    WHERE
      tr.USER_ID = ta.USER_ID AND
      ta.Arrive IS NOT NULL
) as LAR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...