【发布时间】:2019-04-15 17:23:30
【问题描述】:
我需要根据另一个表的输入日期加载一个表,该日期介于一个月的第一天和该月的最后一天之间。我需要将负载减少到从当月开始 1 个月的 1 个月的记录价值,然后从当月开始减少 2 个月,依此类推。
我尝试过 CTE,使用光标并手动更改 datediff 参数。最后一种方法有效,但我想动态加载表格
Declare @StartDt as datetime = (SELECT FORMAT(DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,GETDATE())-1,0)),'MM/dd/yyyy'));
Declare @endDt as datetime = EOMONTH(@StartDt);
SELECT useruid,
userfullname,
sum(totaltime)SumTime,
@StartDt as StartDate,
@EndDt as EndDate
FROM Table_1.tbl
WHERE ENTRYDATE between @StartDt and @EndDt
group by useruid, USERFULLNAME;
我将其插入到另一个表中。通过手动将 Startdt 变量中的 -1 更改为 -2 等等,我没有问题。我想知道是否可以在加载另一个表时动态更改它。
同样,我在加载表格时没有问题。我只是想知道是否有更有效的方法可以做到这一点,因为我必须回到 100 个月。
【问题讨论】:
-
我不明白 - 您正在过滤月份中的任何一天,然后一次返回 1 个月,但插入到同一个表中。为什么不能一次加载所有 100 个月?
标签: sql sql-server date variables datediff