有一个客户表我想删除任何超过1年的时间。
目前我有以下查询,它会返回每个客户超过1年的时间。
select Customer, SUM(Time) as TimeTotal
from CutomerTable
WHERE Entry_Date_Time < DATEADD(YEAR,-1,CURRENT_TIMESTAMP)
group by Customer
如果可能的话,最好在每个客户的客户表中插入时间列中超过一年的时间的负值。目前我将结果导出到excel并逐行插入以更新表。
我应该阅读的任何建议或材料都会很棒。
对不起的例子
实施例
Customer Time Entry_date_Time
1 30 2014-12-20 22:35:00.000
2 10 2014-12-20 22:35:00.000
3 15 2015-12-20 22:35:00.000
1 40 2015-12-20 22:35:00.000
目前该表格将显示
Customer Time
1 70
2 10
3 15
我只希望它显示去年的时间。
Customer Time
1 40
2 0
3 15
答案 0 :(得分:0)
如果您希望获得超过一年但不迟于两年的时间段的TimeTotal(如您的示例所示),那么您需要设置如下所示的日期范围:
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
方法中,您可以将<
与>
的比较反转。