将日期调整为列中的最小值

时间:2018-12-06 11:55:27

标签: sql sql-server alter

我在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; 

2 个答案:

答案 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]