我有这样的数据:
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
列值更大的行1}}列值相等。
在这种情况下,使用select语句只需要获取此列。
v_text
完成这项工作的确切SQL查询是什么?
答案 0 :(得分: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
答案 1 :(得分: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