您将需要某种形式的分组或有条件的sum
操作。虽然这可能不是真正扩展到您的需求 - - 得到的结果在你的问题最简单的方法是:
select username
,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate()),0) then books else 0 end as ThisMonth
,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate())-1,0) then books else 0 end as PreviousMonth
from books
where username = 'Jon'
group by username
与你的问题更多的细节
很显然,你可以得到一个更适合的答案,一个不特定到SQL Server,你应该在不同的DBMS上。也就是说,条件和日期逻辑在所有其他DBMS实现中都是相同的,您可能只需更改函数名称即可。
这是通过将任意开始日期(上述函数中的0
s)与日期值之间的月数相加来获取月初的日期。这个逻辑对您的date
值和今天(getdate()
函数)返回的日期将返回它们都在同一个日历月内的月份的相同开始。通过增加一个月(上面的脚本中的-1
),您可以得到上个月的开始,然后您可以将它与date
的值进行比较,以获得上个月的books
的数量。
sum
和group by
是否会将您的数据按每个username
的值平摊为一行。
您正在使用哪个DBMS? –
请阅读[问]并显示你的尝试。 “GROUP BY”和“DATEPART”会让你走得很远。 – CodeCaster
对于优秀者:你也应该阅读[问]。不要怜悯赞成不完整的问题。 – CodeCaster