从 2 个表中删除查询中的重复结果 | SQL 服务器 2012

Removing duplicate results in a query from 2 tables | SQL SERVER 2012

我可以寻求有关此查询的帮助吗? physicianmasterfile.idnoCHECKINOUT.userid 具有相同的值,将在其中比较数据。问题是查询有重复的结果。

SELECT DISTINCT CHECKINOUT.CHECKTIME,

physicianmasterfile.idno,
physicianmasterfile.lastname,
physicianmasterfile.firstname,
physicianmasterfile.middlename,
physicianmasterfile.fingerscanno,
CONVERT(DATE, CHECKINOUT.CHECKTIME) AS Date,
CONVERT(TIME(0),CHECKINOUT.CHECKTIME) AS Time

FROM 
physicianmasterfile,
CHECKINOUT 

WHERE  
CHECKINOUT.userid=physicianmasterfile.fingerscanno AND
CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
CHECKINOUT.CHECKTYPE='I'

ORDER BY CHECKINOUT.CHECKTIME

我知道 UNION 会解决这个问题,但我不确定如何处理这个问题,因为 physicianmasterfile 有多个列需要包含在查询中,并且 CHECKINOUT 我只需要 1 列。

这是上述查询的示例数据。

不应有重复的结果。

这是我目前得到的结果,但运气不好。

SELECT distinct R.idno, R.lastname, R.firstname, R.middlename, R.fingerscanno,
       LD.CHECKTIME, LD.CHECKTYPE,LD.USERID
FROM physicianmasterfile As R
LEFT JOIN CHECKINOUT AS LD on LD.USERID = R.fingerscanno
WHERE  
       CONVERT(DATE, LD.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
       YEAR(LD.CHECKTIME) = YEAR(SYSDATETIME()) AND
       LD.CHECKTYPE='I'
ORDER BY R.idno desc

编辑:

很抱歉造成混淆,我的意思是查询必须只显示每个名字、姓氏、中间名中的最新一个,例如:姓氏 ZZZZ 必须只显示 CHECKTIME 28:19.0 和 TIME: 5:28:19, lastname NNNN 必须只显示 CHECKTIME 57:06.0 和 TIME: 7:57:06.. 等等..

我没有看到您的所有数据,但请尝试将您的 FROM 和 WHERE 子句更改为:

    FROM 
       physicianmasterfile LEFT JOIN CHECKINOUT ON
       physicianmasterfile.fingerscanno = CHECKINOUT.userid
    WHERE  
       CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME()) AND
       YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND
       CHECKINOUT.CHECKTYPE='I'

这个我没有测试过,所以我不知道它是否准确。