Sql server 在系统上显示联机用户
我不知道我到底错在哪里,但我需要一个当前正在工作的所有员工的列表(对于当前一天),这是我的sql查询:Sql server 在系统上显示联机用户,sql-server,Sql Server,我不知道我到底错在哪里,但我需要一个当前正在工作的所有员工的列表(对于当前一天),这是我的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 z
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
这是我的查询中数据的外观:
对我来说,问题是,我如何更正我的查询,以便只获得每个用户当前一天的最后到达时间?
在这种情况下,要仅获取这些值:
使用下面的行号尝试下面的脚本-
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
您可以尝试以下方法:
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
非常欢迎@lasta。很高兴看到它有所帮助:)