2

我有这样的数据:

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_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

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

4

2 回答 2

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

SQLFiddle 演示

于 2012-10-21T14:38:10.017 回答
2

在 SQL 中,我们有GROUP BY允许我们合并重复行的操作。在您的问题中,您想要汇总所有相同的值,除了r_ticket_id.那个,您希望找到 SQL 中转换为MAX函数的最大值。

SELECT
    name_text
,   c_num
,   d_type
,   unique_id
,   v_text
,   MAX(r_ticket_id) AS max_r_ticket_id
FROM
    dbo.MyTableNameHere
GROUP BY
    name_text
,   c_num
,   d_type
,   unique_id
,   v_text
于 2012-10-21T14:38:22.297 回答