我在Microsoft SQL Server的表X中具有以下数据:
Date Description
01.12.2010 A
02.12.2010 A
02.12.2010 A
22.03.2011 B
23.03.2011 B
23.03.2011 B
24.06.2011 C
24.06.2011 C
24.06.2011 C
28.09.2012 D
我想创建一个名为“ adjustedDates”的新列,其中具有相同唯一描述的所有行都将获得这些描述的最早日期。因此,对于A我希望所有As的日期都为2010年1月12日。
我不确定如何编写查询:
ALTER TABLE [X] ADD AdjustedDates AS (case when [description] in ("some logic") then ("some logic") else end;
答案 0 :(得分:0)
在SQL Server中,您可以使用可更新的CTE和窗口函数:
alter table x add AdjustedDate Date;
with toupdate as (
select t.*,
min(date) over (partition by description) as new_adjusteddate
from x
)
update toupdate
set adjusteddate = new_adjusteddate;
您真的不能使用单个alter table
命令来执行此操作。好吧,实际上,您可以-如果您定义了一个函数来计算调整后的日期。但是使用update
很简单。
答案 1 :(得分:0)
考虑使用索引视图:
CREATE VIEW [NewViewName]
WITH SCHEMABINDING
AS
SELECT [Date], [Description], FIRST_VALUE([date]) OVER(PARTITION BY
[Description] ORDER BY date ASC) AS [AdjustedDates]
FROM [X]