我有这样的数据:

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

我只想选择一行具有r_ticket_id列值较大的行,如果name_textc_numd_typeunique_idv_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

可以执行此工作的确切SQL查询是什么?

最佳答案

当一条记录可能具有相同的唯一ID但在每一列上具有不同的值时,这可能会有所帮助。利用ROW_NUMBER和window函数。我猜它们已经存在于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

SQLFiddle Demo

关于sql - SQL Server:多个具有相同列值的行(一个除外),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12998801/

10-11 21:02
查看更多