最近遇到一个小需求,大致需求是取表1中的timestamp类型的某个字段的最大值并减去30分钟,赋值给表2中的timestamp类型字段,用来做下一步。
由此得出具体思路:
1,需要先得出表1中timestamp类型字段的最大值
2,用得到的最大值减去30min
3,将最终值赋值给表2中的字段
那具体的sql应该怎么写呢?
先来看语法,和以上思路一一对应
1,表1中timestamp类型字段的最大值
select max(column) from table [WHERE condition] ;
2,用得到的最大值减去30min
此处只需要结果,故使用select,搭配内置函数INTERVAL
select column - INTERVAL '30 minutes' from table [WHERE condition] ;
3,将最终值赋值给表2中的字段
update table2
set column1 = column from table1 [WHERE condition])
where table2.column2 = value ;
注:如果无条件则会更新表中所有数据,故执行不带条件的update需要慎重慎重再慎重
组合起来即:
update table2
set column1 = (select max(column) - INTERVAL '30 minutes' from table1)
where table2.column2 = value ;
实例:
update workorder
set appointmenttime = (select max(completiontime) - INTERVAL '30 minutes' from productline)
where constructionstatus = 'Undispatched';
博主使用的是postgressql数据库,但关系型数据库语法都大差不差。