通过sql更新表的第一行
我有一个每个_名称的基表:通过sql更新表的第一行,sql,date,Sql,Date,我有一个每个_名称的基表: start_date end_date type name person_id 01-jan-2016 02-Feb-2016 A abc 1 03-Feb-2016 31-Dec-412 E abc 1 每支腿数据 start_date end_date leg_code person_id 31-Nov-2015 03-Ma
start_date end_date type name person_id
01-jan-2016 02-Feb-2016 A abc 1
03-Feb-2016 31-Dec-412 E abc 1
每支腿数据
start_date end_date leg_code person_id
31-Nov-2015 03-Mar-2016 SG 1
04-Mar-2016 31-Dec-4712 CG 1
现在我想要的是,只要名称的minstart_日期minstart_日期leg_数据,那么peru leg_数据的第一行就应该被peru name minstart_日期替换
比如:
If min(name.start_date) <> min(leg.start_date)
then
update per_leg_data
set start_date = (select distinct min(start_date)
from per_name pn
where pn.person_id=person_id)
但是更新日期开始的每条腿数据的所有行是您所需要的。如果我在记事本++中写的时候出现打字错误或其他问题,请道歉
with T as --This table contain only the min datetime of each person.
(
select n.person_id, min(n.start_date) personMinDate, min(l.start_date) legMinDate
from per_name n
join per_leg_data l on l.person_id = n.person_id
group by n.person_id
)
update leg
-- this part replace your leg start date with your person min date
set leg.start_date = T.personMinDate
from per_leg_data leg
-- this join will give you only the correct row of the leg record.
join T on T.person_id = leg.person_id and T.legMinDate = leg.start_date
-- this filter make this is only executed when necessary.
where leg.start_date <> T.personMinDate;
重写更新查询
如果表中没有主键,并且数据按开始日期升序排序,则更新需要重写的查询
如果minname.start\u date minleg.start\u date
然后
更新每支腿数据
设置开始日期=选择不同的开始日期
从per_name pn
其中pn.person\u id=person\u id
和pn.start_date=从peru name中选择不同的minstart_dateperson_id来自何处?它不在您的per_name表中,是吗?谢谢您更正meIs表结构是否已修复?最好是规范化这些表。exmaple表中哪些是主键?person_id是主键,这些表是日期跟踪的,因此结构是固定的。您确定peron_id是主键吗?有重复的行。个人id不可能成为PK。我必须这样做。。这只是一个更新