更新第1列基于B列中的时间和重复值

时间:2017-01-26 07:31:06

标签: tsql while-loop duplicates sql-update

enter image description here
 表A:ID(身份)名称状态StateTimestamp课程
              1 ABC C 1/1/2001?               2 ABC A 1/5/2001 OO               3 ABC B 2/3/2001 OO               4 ABC A 2/4/2001 PP               5 ABC D 2/5/2001 PP               6 ABC A 2/12/2001 QQ               7 ABC A 2/18/2001 RR               8 ABC z 2/20/2001?               9 XYZ C 1/1/2001?              10 XYZ A 1/14/2001?              11 XYZ D 1/16/2001?              12 XYZ A 1/17/2001?              13 XYZ z 1/31/2001?

ID是一个唯一的列。每个州都属于名称,并且具有与增量顺序相关联的时间戳。  根据State-A更新每行的课程,以便在状态A第一次出现名称更新时  过程为'OO',当状态A第二次出现在名称更新过程'PP'时,当状态C出现第三次更新时  当然是'QQ'。并且状态A的重复次数可以是无限的。  并且所有州的课程都有日期>状态A和日期<连续状态A - 即在1待定状态之后  并且在跟随待决状态之前(即上表中的B,2/3/2001)必须与课程更新相同  预先形成一个状态(即OO)。您的想法将不胜感激。

创建表格为:  创建表TABLEA  (    身份识别1,1  ,名称varchar(155)  ,州varchar(155)  ,StateTimestamp日期时间  ,课程varchar(155)  )

填充为: 插入表格值  ('ABC','C','1/1/2001','?') ,('ABC','A','1/5/2001','?') ,('ABC','B','2/3/2001','?') ,('ABC','A','2/4/2001','?') ,('ABC','D','2/5/2001','?') ,('ABC','A','2/12/2001','?') ,('ABC','A','2/18/2001','?') ,('ABC','z','2/20/2001','?') ,('XYZ','C','1/1/2001','?') ,('XYZ','A','1/14/2001','?') ,('XYZ','D','1/16/2001','?') ,('XYZ','A','1/17/2001','?') ,('XYZ','z','1/31/2001','?')

期望的结果:  表A:  ID(身份)名称状态StateTimestamp课程  1 ABC C 1/1/2001?  2 ABC A 1/5/2001 OO  3 ABC B 2/3/2001 OO  4 ABC A 2/4/2001 PP  5 ABC D 2/5/2001 PP  6 ABC A 2/12/2001 QQ  7 ABC A 2/18/2001 RR  8 ABC z 2/20/2001 RR  9 XYZ C 1/1/2001 XX  10 XYZ A 1/14/2001 YY  11 XYZ D 1/16/2001 YY  12 XYZ A 1/17/2001 ZZ  13 XYZ z 1/31/2001 ZZ

0 个答案:

没有答案