2017-06-19 63 views
-1

我有一个表,用户捐赠的册数:查询两个不同的地方条件

username books date 
____________________________________ 
Jon  3  2017-06-12 
Jon  2  2017-05-20 
Mary  4  2017-05-12 

我想是这样

username This month Previous Month 
_______________________________________________ 
Jon   3    2 
+1

您正在使用哪个DBMS? –

+0

请阅读[问]并显示你的尝试。 “GROUP BY”和“DATEPART”会让你走得很远。 – CodeCaster

+1

对于优秀者:你也应该阅读[问]。不要怜悯赞成不完整的问题。 – CodeCaster

回答

0

您将需要某种形式的分组或有条件的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的数量。

sumgroup by是否会将您的数据按每个username的值平摊为一行。