SQL Server:具有相同列值的多个行,除了一个

Meh*_*ert 2 sql t-sql sql-server

我有这样的数据:

name_text   ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600206
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600240
Copy.docx             3560715 Guide    9D06F8EFF4EC4A2D862F5A0DB3BA357B 2       28600219
Run Code Online (Sandbox Code Playgroud)

我想选择只有一个排它具有更大的价值r_ticket_id列,如果name_text,c_num,d_type,unique_id,v_text列中的值相等.

在这种情况下,使用select语句只需要获取此列.

name_text   ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600240
Copy.docx             3560715 Guide    9D06F8EFF4EC4A2D862F5A0DB3BA357B 2       28600219
Run Code Online (Sandbox Code Playgroud)

完成这项工作的确切SQL查询是什么?

Joh*_*Woo 5

当记录可能具有相同的唯一ID但在每列上具有不同的值时,这可能会有所帮助.利用ROW_NUMBER和窗口功能.我猜他们已经出现在sql-server 2005上了.

SELECT name_text,c_num,d_type,unique_id,v_text,r_ticket_id
FROM
    (
        SELECT  name_text, c_num, d_type, unique_id, v_text, r_ticket_id,
                ROW_NUMBER() OVER (PARTITION BY unique_id 
                                   ORDER BY r_ticket_id DESC) rn
        FROM tableName
    ) x
WHERE x.rn = 1
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示