Microsoft SQL Server: запрос для получения отдельных записей при наличии дублирующих записей для одного и того же номера заявки - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать запрос SQL, чтобы получить последний обновленный номер заявки в моей таблице.Каждый раз, когда происходит обновление заявки, она создает новую запись в таблице.Поле ID будет уникальным для каждой записи.

Я пытался использовать оператор SELECT DISTINCT и функцию MAX в моем подзапросе, но не смог получить желаемый результат.

Таблица

ID     Ticket_Number  Priority  Assignee          Last_Updated_Date
21100        2          Low       Jerry          2018-9-13 15:10:01
21105        2         Medium     Chris          2018-9-15 23:10:08
21520        3          High      James, Alan    2018-9-14 08:10:11
22000        4          Low       Chris          2018-9-14 20:10:22
22150        4          High      Chris, Jerry   2018-9-16 11:00:00
23120        6          Low       Albert         2018-9-17 12:10:06
23220        7          High      Steve          2018-9-18 10:10:02

Желаемый выход

 ID     Ticket_Number  Priority  Assignee          Last_Updated_Date
21105        2         Medium     Chris          2018-9-15 23:10:08
21520        3          High      James, Alan    2018-9-14 08:10:11
22150        4          High      Chris, Jerry   2018-9-16 11:00:00
23120        6          Low       Albert         2018-9-17 12:10:06
23220        7          High      Steve          2018-9-18 10:10:02

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018
WITH cte AS 
(SELECT ROW_NUMBER() OVER (ORDER BY Last_Updated_Date DESC) rn,* FROM t)

SELECT TOP 1 * FROM cte WHERE rn=1 ORDER BY ID

Я думаю, что это будет работать, если вашей СУБД является Microsoft SQL Server.

0 голосов
/ 20 сентября 2018

попробуйте использовать следующий запрос:

select a.* from yourtable a
inner join 
(select distinct Ticket_Number,max(Last_Updated_Date) as Last_Updated_Date from yourtable 
group by Ticket_Number) b
on a.Ticket_Number = b.Ticket_Number and a.Last_Updated_Date = b.Last_Updated_Date
0 голосов
/ 19 сентября 2018

Вы можете использовать функцию окна ROW_NUMBER:

SELECT ID, Ticket_Number, Priority, Assignee, Last_Updated_Date
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Ticket_Number ORDER BY Last_Updated_Date DESC) AS rn
    FROM yourTable
) t
WHERE t.rn = 1;

или использовать связанный подзапрос

select ID, Ticket_Number, Priority, Assignee, Last_Updated_Date from t t1
where t.Last_Updated_Date  in (select max(Last_Updated_Date from t t2 )
                               where t2.Ticket_Number  =t1.Ticket_Number  
                               group by t2.Ticket_Number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...