update一个表的语句

xiaoliuvv 2019-03-15 11:25:17
有一个表,关键字段如下
leibie riqi new
1 2018-05-01 null
1 2018-06-01 null
2 2018-07-01 null
3 2018-03-01 null
1 2018-08-01 null
2 2018-05-01 null
new字段为smallint
我想用一条sql语句update leibie为1 的数据, 将最新日期的 new字段设置为1 ,同时将不是最新日期的new字段设置为0
也就是最终结果leibie为1,日期为 2018-08-01的那条数据new为1,其他leibie为1的new为0
leibie为2,3的不动
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoliuvv 2019-03-15
  • 打赏
  • 举报
回复
引用 4 楼 纳尼刘君 的回复:
来个容易理解的: UPDATE csdn_leibie SET new=CASE WHEN NOT EXISTS(SELECT * FROM csdn_leibie WHERE a.leibie=leibie AND riqi>a.riqi) THEN 1 ELSE 0 END FROM csdn_leibie a WHERE leibie=1
你这个思路挺好的,找每一条记录是否有大于他日期的记录,谢谢
纳尼刘君 2019-03-15
  • 打赏
  • 举报
回复
来个容易理解的: UPDATE csdn_leibie SET new=CASE WHEN NOT EXISTS(SELECT * FROM csdn_leibie WHERE a.leibie=leibie AND riqi>a.riqi) THEN 1 ELSE 0 END FROM csdn_leibie a WHERE leibie=1
Dear SQL(燊) 2019-03-15
  • 打赏
  • 举报
回复
引用 2 楼 xiaoliuvv 的回复:
[quote=引用 1 楼 Dear SQL 的回复:]


;
with list as(
     select leibie,riqi,new,rid=row_number()over(partition by leibie order by riqi desc)
     from table
)
update list set new=case when rid=1 then 1 else 0 end 
因为是写在程序里,需要写成一条sql语句[/quote]这就是一条呀!
xiaoliuvv 2019-03-15
  • 打赏
  • 举报
回复
引用 1 楼 Dear SQL 的回复:


;
with list as(
     select leibie,riqi,new,rid=row_number()over(partition by leibie order by riqi desc)
     from table
)
update list set new=case when rid=1 then 1 else 0 end 
因为是写在程序里,需要写成一条sql语句
Dear SQL(燊) 2019-03-15
  • 打赏
  • 举报
回复


;
with list as(
     select leibie,riqi,new,rid=row_number()over(partition by leibie order by riqi desc)
     from table
)
update list set new=case when rid=1 then 1 else 0 end 

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧