Sql server 基于group by查询的结果将SQL插入到表中

Sql server 基于group by查询的结果将SQL插入到表中,sql-server,Sql Server,我有一个客户表,我想在任何时间删除超过1年的客户表 select Customer, SUM(Time) as TimeTotal from CutomerTable WHERE Entry_Date_Time < DATEADD(YEAR,-1,CURRENT_TIMESTAMP) group by Customer 目前,我有以下查询,它返回每个客户的时间超过1年 select Customer, SUM(Time) as TimeTotal

我有一个客户表,我想在任何时间删除超过1年的客户表

    select Customer, SUM(Time) as TimeTotal
    from CutomerTable
    WHERE Entry_Date_Time < DATEADD(YEAR,-1,CURRENT_TIMESTAMP)
    group by Customer
目前,我有以下查询,它返回每个客户的时间超过1年

    select Customer, SUM(Time) as TimeTotal
    from CutomerTable
    WHERE Entry_Date_Time < DATEADD(YEAR,-1,CURRENT_TIMESTAMP)
    group by Customer
当前,该表将显示

Customer    Time
1       70
2       10      
3       15
我只想让它显示去年的时间

Customer    Time
1       40
2       0
3       15

如果您希望获得时间总计,时间段晚于一年但不晚于两年前(如示例所示),则需要设置日期范围,如下所示:

declare
  @datebegin  date,
  @dateend    date

set @dateend = DATEADD(YEAR,-1,CURRENT_TIMESTAMP)
set @datebegin = DATEADD(YEAR, -1, @dateend)

select c.Customer, ct.TimeTotal_LastYear
from Customers c
left join
(
    select ct.Customer, SUM(Time) as TimeTotal
    from CutomerTable ct
    WHERE ct.Entry_Date_Time between @datebegin and @dateend
    group by ct.Customer
) t on ct.Customer = c.Customer
如果您希望接收在期间内没有定义相应行的客户,请使用上面脚本中所示的
left join
,或者使用与
outer apply
相同的场景

编辑 事实上,您的示例令人困惑:应用的过滤器“比一年前旧”,显示的数据比一年前晚。如果只需要去年,则过滤器谓词必须简单一点:

declare
  @datebegin  date

set @datebegin = DATEADD(YEAR,-1,CURRENT_TIMESTAMP)

select c.Customer, ct.TimeTotal_LastYear
from Customers c
left join
(
    select ct.Customer, SUM(Time) as TimeTotal
    from CutomerTable ct
    WHERE ct.Entry_Date_Time >= @datebegin
    group by ct.Customer
) t on ct.Customer = c.Customer

在您的
groupby
方法中,您可以将比较从

您的问题不清楚。如果要删除所有早于1年的
entry\u date\u time
行,只需执行
delete FROM CutomerTable,其中entry\u date\u time
但问题的其余部分令人困惑,请发布一个您拥有的数据示例以及您希望在数据修改后获得的相应行集。请编辑第一个问题。我不想从表中删除信息,因为我想在以后使用它。我想向表中添加一个负值来调整时间。