SQL Server: выберите одну строку из двух строк с одинаковым идентификатором - PullRequest
0 голосов
/ 16 октября 2018

У меня есть таблица в SQL Server, которая содержит более 100 строк.

Ниже приведен пример данных, которые я хочу получить:

51206 69975314 InWork NULL
52160 70064509 Close  2018-05-10 12:52:49.000
52109 70071378 InWork NULL

Мне нужно, если идентификатор содержит 2другой статус, выберите статус InWork или идентификатор в максимальное время.

CREATE TABLE [dbo].[#RESULT_TABLE_X]
(
    [ID_ADD] NVARCHAR(50) NULL,
    [ID] NVARCHAR(50) NULL,
    [STATUS] NVARCHAR(50) NULL,
    [TIME] DATETIME NULL
) ON [PRIMARY]

INSERT INTO [dbo].[#RESULT_TABLE_X] 
VALUES ('51206', '69975314', 'InWork', NULL),
       ('52160', '70064509', 'Close', '2018-10-05 10:52:49.000'),
       ('52160', '70064509', 'Close', '2018-10-05 12:52:49.000'),
       ('52109', '70071378', 'InWork', NULL),
       ('51887', '70071378', 'Close', '2018-10-06 10:52:49.000')

Я использовал приведенный ниже запрос, но он не отображает требуемый результат для меня:

SELECT
    ID_ADD, ID, STATUS,TIME
FROM
    [dbo].[#RESULT_TABLE_X]
WHERE
    STATUS NOT IN ('Close')
ORDER BY
    STATUS, ID 

как решитьэто проблема?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

попробуйте это:

    CREATE TABLE [dbo].[#RESULT_TABLE_X]
    (
        [ID_ADD] NVARCHAR(50) NULL,
        [ID] NVARCHAR(50) NULL,
        [STATUS] NVARCHAR(50) NULL,
        [TIME] DATETIME NULL
    ) ON [PRIMARY]

    INSERT INTO [dbo].[#RESULT_TABLE_X] 
    VALUES ('51206', '69975314', 'InWork', NULL),
           ('52160', '70064509', 'Close', '2018-10-05 10:52:49.000'),
           ('52160', '70064509', 'Close', '2018-10-05 12:52:49.000'),
           ('52109', '70071378', 'InWork', NULL),
           ('51887', '70071378', 'Close', '2018-10-06 10:52:49.000')

    ;with cte
    As(

        Select Max(ID_Add) as ID_ADD, [ID] as ID
        from [dbo].[#RESULT_TABLE_X] 
        Group by ID
    )

    Select r.ID_ADD,r.Id,MAX(Status) as Status, Max(Time) as Time from cte c
    INNER JOIN [dbo].[#RESULT_TABLE_X] r on c.ID_ADD=r.ID_ADD and c.Id=r.Id
    Group by r.Id ,r.ID_Add

    Drop Table [dbo].[#RESULT_TABLE_X] 
0 голосов
/ 16 октября 2018

использовать ROW_NUBMER() для генерации рабочего номера для ID_ADD & ID

SELECT *
FROM
(
    SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY ID_ADD, ID 
                                          ORDER BY TIME DESC)
    FROM   #RESULT_TABLE_X
) D
WHERE D.RN = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...