Meine Tabelle speichert Uhr out Zeiten, aber einige der sie mehr als 1 Mal Punch. Wie erhalte ich das letzte Ergebnis, wenn das Ergebnis mehr als eins ist?Nehmen Sie das letzte Ergebnis, wo Ergebnis mehr als eins
SELECT
ROW_NUMBER() OVER (PARTITION BY l.USERID, day(l.CHECKTIME), DATEPART(hh, l.CHECKTIME) ORDER BY (select 0)) RN,
l.USERID,
CASE
WHEN CAST(l.CHECKTIME AS TIME) > = CAST(SC.EndTime AS TIME)
THEN CONVERT(VARCHAR(10), CAST(l.CHECKTIME AS TIME), 100)
ELSE 'Early ClockOut ' + CONVERT(VARCHAR(100), CAST(l.CHECKTIME AS TIME), 100)
END as ClockOut,l.CHECKTIME
FROM
CHECKINOUT l
INNER JOIN
USERINFO u ON l.USERID = u.USERID
INNER JOIN
UserUsedSClasses uuc ON uuc.USERID = u.USERID
INNER JOIN
SchClass SC ON uuc.SchId = SC.schClassid
WHERE
u.BADGENUMBER not in (79,103,78)
AND MONTH(CHECKTIME) = MONTH(getdate()) AND YEAR(CHECKTIME) = YEAR(getdate())
AND uuc.SchId = 1
AND DATEPART (hh, l.CHECKTIME) >= DATEPART(hh, SC.EndTime)
AND DATEPART(hh, l.CHECKTIME) >= DATEPART (hh, SC.StartTime)
ORDER BY
u.BADGENUMBER
Ausgang:
RN USERID ClockOut CHECKTIME
1 6 7:04PM 2017-03-09 19:04:12.000
2 6 7:55PM 2017-03-09 19:55:59.000
1 6 11:31PM 2017-03-09 23:31:27.000
sollte nur dieses Ergebnis zeigt sein:
RN USERID ClockOut CHECKTIME
-----------------------------------------------
1 6 11:31PM 2017-03-09 23:31:27.000