在SQL Server中,如何根据系列的最后一次出现更新值
我在SQL Server中使用了在SQL Server中,如何根据系列的最后一次出现更新值,sql,sql-server,Sql,Sql Server,我在SQL Server中使用了LEAD()函数来尽我所能。我有病人、实验室和约会。我已经了解了如何获取已完成(准时)约会的最后状态和第二到最后状态。我的问题是更新“从不”或“最终”之前的所有值,使其与最后一个条目相同 EverDone Column ON-TIME = the test was done EVENTUALLY = means the very next test was completed NEVER = the last test was never done 我需要将“
LEAD()
函数来尽我所能。我有病人、实验室和约会。我已经了解了如何获取已完成(准时)约会的最后状态和第二到最后状态。我的问题是更新“从不”或“最终”之前的所有值,使其与最后一个条目相同
EverDone Column
ON-TIME = the test was done
EVENTUALLY = means the very next test was completed
NEVER = the last test was never done
我需要将“最终”之前的所有-设置为“最终”。例如2002年的低密度脂蛋白项目
我需要设置“永不”之前的所有-,例如“血液”项
但这些标准不能像低密度脂蛋白测试那样是该系列的最后一个标准。最后一次测试从未完成,但最终完成之前的状态
Name Item date Status EverDone
----------------------------------------------------
ZZNIN, CHEEZE BLOOD 6/6/2002 LAPSED ---
ZZNIN, CHEEZE BLOOD 1/6/2003 LAPSED ---
ZZNIN, CHEEZE BLOOD 7/8/2003 LAPSED ---
ZZNIN, CHEEZE BLOOD 6/15/2004 LAPSED NEVER
SLAYER, JONES LDL 8/19/2002 LAPSED ---
SLAYER, JONES LDL 10/2/2002 LAPSED ---
SLAYER, JONES LDL 12/12/2002 LAPSED ---
SLAYER, JONES LDL 12/12/2002 LAPSED ---
SLAYER, JONES LDL 12/16/2002 LAPSED EVENTUALLY
SLAYER, JONES LDL 12/26/2002 COMP ON-TIME
SLAYER, JONES LDL 1/8/2004 LAPSED NEVER
如果您有一个主键,这将工作-
UPDATE TableName
SET EverDone = 'EVENTUALLY'
WHERE KeyName in (SELECT b.KeyName
FROM TableName a
join TableName b on a.Name = b.Name
and a.Item = b.Item
and a.Date < b.Date
bEverDone = '---'
WHERE a.EverDone = 'EVENTUALLY')
UPDATE TableName
SET EverDone = 'EVENTUALLY'
WHERE CONCAT(Name, Item, Date) in (SELECT CONCAT(b.Name, b.Item, b.Date)
FROM TableName a
join TableName b on a.Name = b.Name
and a.Item = b.Item
and a.Date < b.Date
bEverDone = '---'
WHERE a.EverDone = 'EVENTUALLY')
Slayer-LDL-12/16/01之前的Slayer行也将更新。我认为这是可以的。您不需要任何特殊函数,可以通过子选择或自连接来实现。我对sql非常陌生。你有这样的例子吗?这个表上有主键吗?或者你需要使用名称、项目和日期的组合吗?我希望有更好的方法来做第一件事-CONCAT是我想到的第一件事。你的第一件事不起作用,因为它没有提到日期。不是说它根本不起作用,而是它不能满足OP的要求。是的,这就是为什么我指定它只对给定的数据集起作用。我补充了更多的澄清。主键使它更容易-我不知道如何在那里得到第一个日期@塔巴莱曼确定了发行日期。
Name Item date Status EverDone
----------------------------------------------------
ZZNIN, CHEEZE BLOOD 6/6/2002 LAPSED ---
ZZNIN, CHEEZE BLOOD 1/6/2003 LAPSED ---
ZZNIN, CHEEZE BLOOD 7/8/2003 LAPSED ---
ZZNIN, CHEEZE BLOOD 6/15/2004 LAPSED NEVER
SLAYER, JONES LDL 12/10/2001 LAPSED ---
SLAYER, JONES LDL 12/12/2001 LAPSED ---
SLAYER, JONES LDL 12/16/2001 LAPSED ON-TIME
SLAYER, JONES LDL 8/19/2002 LAPSED ---
SLAYER, JONES LDL 10/2/2002 LAPSED ---
SLAYER, JONES LDL 12/12/2002 LAPSED ---
SLAYER, JONES LDL 12/12/2002 LAPSED ---
SLAYER, JONES LDL 12/16/2002 LAPSED EVENTUALLY
SLAYER, JONES LDL 12/26/2002 COMP ON-TIME
SLAYER, JONES LDL 1/8/2004 LAPSED NEVER