【问题标题】:T SQL Update rows using max functionT SQL 使用 max 函数更新行
【发布时间】:2016-03-30 13:41:12
【问题描述】:

使用这个查询,我需要 SQL 做的是根据另一列更新列值,以便它获取最新的 MAX ID。

select 
    max(T1id), t1.v_code 
from 
    [Table1] T1
join 
    [Table2] t2 on t1.T1Code = t2.T2Code
where 
    t2.active = 0
    and t1.t1activesw = 0
    and t1.mapping not like '%selected%'
group by 
    t1.v_code

我想将选择加入到版本代码 id = max(t1.v_code) 上的表格中,然后将代码用作子选择,只是不确定如何完成它。

【问题讨论】:

  • 也许对我来说早上太早了,但我真的很难理解你想做什么。你能澄清一下查询的意图吗?
  • T Clausen 的帖子是正确的,因为我试图让结果为每个 t1.v_code 获得最高的 t1.id。最终目标是根据每个 t1.v_code 的最高 ID 更新 t1.active = 1。

标签: sql-server tsql join subquery max


【解决方案1】:

这样,您可以从每个 T1.v_code 的最高 T1.id 的行中获取所有数据:

;WITH CTE as
(
  SELECT
      T1.*, 
      row_number() over (partition by T1.v_code order by T1.id desc) rn
  FROM
      [Table1] T1
  JOIN
    [Table2] t2 on t1.T1Code = t2.T2Code
  WHERE
    t2.active = 0
    and t1.t1activesw = 0
    and t1.mapping not like '%selected%'
)
SELECT * 
FROM CTE 
WHERE rn = 1

编辑:为了更新,替换(根据评论中的要求)

SELECT * 
FROM CTE 
WHERE rn = 1

UPDATE CTE 
SET columnname = 'newvalue' 
WHERE rn = 1

这个

【讨论】:

  • 感谢 t-clausen,这是我以前没有做过的事情。只在现有的控制表中工作过,我以前没有设置过!
  • 如果可行,请不要忘记接受答案
  • 寻找如何更新 CTE 中的所有这些记录。
  • 您可以更新 CTE 而不是选择,更改我的答案以显示它
  • T Clausen 这确实是一个解决方案,可以得到我想要的结果。标记为答案....谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多