Используя аналитическую форму функции MAX (), разделение, которое в верхнем регистре UID решит это.
Доступен в качестве демонстрации здесь SQL Fiddle
Запрос 1 :
SELECT
M.LAST_VISIT_DATE, U.*
FROM (
SELECT
U."UID"
, V.LAST_VISIT_DATE
, MAX(V.LAST_VISIT_DATE) OVER(PARTITION BY UPPER(U."UID")) MAX_VISIT
FROM USER_TABLE U
INNER JOIN USER_VISIT_STAT V ON U.ID = V.USID
) M
INNER JOIN USER_TABLE U ON M."UID" = U."UID"
WHERE M.MAX_VISIT < ADD_MONTHS(SYSDATE,-24)
AND M.LAST_VISIT_DATE = M.MAX_VISIT
Результаты :
| LAST_VISIT_DATE | ID | NAME | UID | DEPARTMENT |
|-----------------------|-----|--------|------|------------|
| 2016-08-29 00:00:00.0 | 104 | HARI | US9 | ENGG |
| 2016-07-19 00:00:00.0 | 105 | MAYANK | US90 | HR |
Настройка схемы Oracle 11g R2 :
CREATE TABLE USER_TABLE
("ID" int, "NAME" varchar2(7), "UID" varchar2(4), "DEPARTMENT" varchar2(4))
;
INSERT ALL
INTO USER_TABLE ("ID", "NAME", "UID", "DEPARTMENT")
VALUES (101, 'PRAKASH', 'US45', 'ENGG')
INTO USER_TABLE ("ID", "NAME", "UID", "DEPARTMENT")
VALUES (102, 'RAJESH', 'US22', 'ENGG')
INTO USER_TABLE ("ID", "NAME", "UID", "DEPARTMENT")
VALUES (103, 'PRAKASH', 'us45', 'HR')
INTO USER_TABLE ("ID", "NAME", "UID", "DEPARTMENT")
VALUES (104, 'HARI', 'US9', 'ENGG')
INTO USER_TABLE ("ID", "NAME", "UID", "DEPARTMENT")
VALUES (105, 'MAYANK', 'US90', 'HR')
SELECT * FROM dual
;
CREATE TABLE USER_VISIT_STAT
("ID" int, "USID" int, "LAST_VISIT_DATE" timestamp)
;
INSERT ALL
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (1, 101, '31-Aug-2018 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (2, 102, '30-Aug-2018 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (3, 101, '30-Aug-2018 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (4, 103, '20-Feb-2016 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (5, 104, '29-Aug-2016 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (6, 105, '19-Jul-2016 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (7, 101, '12-Jun-2016 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (8, 102, '12-Jun-2016 12:00:00 AM')
INTO USER_VISIT_STAT ("ID", "USID", "LAST_VISIT_DATE")
VALUES (9, 104, '13-Apr-2016 12:00:00 AM')
SELECT * FROM dual
;