Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过sql更新表的第一行_Sql_Date - Fatal编程技术网

通过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_date

person_id来自何处?它不在您的per_name表中,是吗?谢谢您更正meIs表结构是否已修复?最好是规范化这些表。exmaple表中哪些是主键?person_id是主键,这些表是日期跟踪的,因此结构是固定的。您确定peron_id是主键吗?有重复的行。个人id不可能成为PK。我必须这样做。。这只是一个更新