Обращаясь к @ scaisEdge
Я попробовал ваш запрос и получил сообщение об ошибке :
Мой оригиналзапрос дает плохой результат
Но вот результат, который мне нужен
Сводка: CTE и row_number () выдают ошибку ORA-00933: SQL command not properly ended
Фактический вопрос:
У меня есть запрос, который возвращает это
Но я хочу, чтобы он возвращал запрос, который удаляет дубликаты, то есть Date
, Login ID
и Subject
должно быть Уникально .
Однако ID number
должно быть минимум , а Creation Date
должно быть самый ранний час дня
Вот желаемый вывод - обратите внимание, что последняя запись имела идентичный Creation Date
, но при этом запись выбора выхода имела наименьшее значение ID number
, то есть 542
Вот мой текущий запрос
SELECT TO_CHAR(MIN(I.INCIDENTID)) AS "Incident ID",
MIN(I.CREATIONDATE) AS "Creation Date",
TO_CHAR(I.CREATIONDATE,'MM-DD-YYYY') AS "Date",
TRIM(MO.DOMAINUSERNAME) AS "Login ID",
TRIM(M.MESSAGESUBJECT) AS "Email Subject"
FROM INCIDENT I
JOIN MESSAGE M
ON M.MESSAGEID = I.MESSAGEID
JOIN MESSAGEORIGINATOR MO
ON M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
GROUP BY TO_CHAR(I.CREATIONDATE,'MM-DD-YYYY'),
TRIM(MO.DOMAINUSERNAME),
TRIM(M.MESSAGESUBJECT)
Мне посоветовали использовать CTE
и row_number()
дляустранить повторяющиеся даты, т.е. вернуть длинную дату с самым ранним временем в дне, но я получаю ошибку при следующем запросе (ORA-00933: SQL command not properly ended
), поэтому, пожалуйста, помогите
with CTE as
(
SELECT t1.*,
row_number() over (PARTITION BY I.CREATIONDATE ORDER BY I.CREATIONDATE) rn
FROM Mytable t1
)
SELECT *
FROM CTE
WHERE rn=1
SELECT TO_CHAR(MIN(I.INCIDENTID)) AS "Incident ID",
MIN(I.CREATIONDATE) AS "Creation Date",
TO_CHAR(I.CREATIONDATE,'MM-DD-YYYY') AS "Date",
TRIM(MO.DOMAINUSERNAME) AS "Login ID",
TRIM(M.MESSAGESUBJECT) AS "Email Subject"
FROM INCIDENT I
JOIN MESSAGE M
ON M.MESSAGEID = I.MESSAGEID
JOIN MESSAGEORIGINATOR MO
ON M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
GROUP BY TO_CHAR(I.CREATIONDATE,'MM-DD-YYYY'),
TRIM(MO.DOMAINUSERNAME),
TRIM(M.MESSAGESUBJECT)