Sql 从计算中删除月份
我有一个执行以下操作的查询:Sql 从计算中删除月份,sql,sql-server,sql-server-2008,date,Sql,Sql Server,Sql Server 2008,Date,我有一个执行以下操作的查询: PriorClients = Sum of New Clients Between Dateadd(mm, -ComparisonMOnths, 'last day of month prior to conversionDate') and 'last day of month prior to conversiondate' 汇总转换为新软件前的客户端总数,并将其与转换为新软件后的客户端进行比较。我想做的是从数据中去掉转换月份。 我有以下专栏: New
PriorClients = Sum of New Clients
Between Dateadd(mm, -ComparisonMOnths, 'last day of month prior to conversionDate')
and 'last day of month prior to conversiondate'
汇总转换为新软件前的客户端总数,并将其与转换为新软件后的客户端进行比较。我想做的是从数据中去掉转换月份。我有以下专栏:
NewClients, ConversionDate, ComparisonMonths
使用Dateadd,我可以得到以下公式:
PriorClients = Sum of New Clients
Between Dateadd(mm, -ComparisonMonths, ConversionDate) and ConversionDAte
AfterClients = Sum of New Clients
Between ConversionDate and DAteadd(mm, ComparisonMonths, ConversionDate)
挑战在于,转换日期随着每一行的变化而变化,就像比较月份一样。例如,如果转换日期为2013年12月10日,我希望:
PriorClients = Sum of New Clients
Between Dateadd(mm, -ComparisonMOnths, 'last day of month prior to conversionDate')
and 'last day of month prior to conversiondate'
这个问题已经简化了。是一篇关于MS SQL中舍入日期的优秀文章。在你的情况下,你想轮到这个月。扩展文章:
declare @dtVariable as datetime;
set @dtVariable = getdate();
select @dtVariable as Original,
DATEADD(Month, DATEDIFF(Month, 0, @dtVariable), 0) as FirstDayOfMonth,
DATEADD(DAY, -1, DATEADD( MONTH, 1, DATEADD(Month, DATEDIFF(Month, 0, @dtVariable), 0))) as LastDayOfMonth;
从这里可以很简单地调整查询以排除月份,方法是添加NOT BETWEEN或简单地将开始和参数调整为正确计算的月份。我建议(1)为表命名(匿名表是SQL问题的祸根),以及(2)显示一些示例数据(输入)和预期结果(输出),对示例中未涉及的任何问题进行评论(但最好举例说明)。我感觉您过度简化了模式;我看不出当每一行附加了不同的日期范围时,如何处理多行。感觉您必须有两个表(因此我们需要两个表名和两组数据)。