我有这样的数据:
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
如果 name_text
、c_num
、d_type<,我只想选择
、r_ticket_id
列中值较大的一行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 查询是什么?
最佳答案
当记录可能具有相同的唯一 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 Demo
关于SQL 服务器 : multiple rows with same column values except one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12998801/