Sql server 基于group by查询的结果将SQL插入到表中
我有一个客户表,我想在任何时间删除超过1年的客户表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
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