我有一张表图书,用户可以捐赠书籍数量:
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
答案 0 :(得分: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
显然,在您的问题中有更多详细信息,如果您使用不同的DBMS,您可以获得更合适的答案,而不是SQL Server特有的答案。也就是说,条件和日期逻辑在所有其他DBMS实现中是相同的,您可能只需要更改函数名称。
这可以通过添加任意开始日期(上述函数中的0
)和日期值之间的月数来获取月初的日期。此逻辑为您的date
值和今天(getdate()
函数)返回的日期将返回同一月份的同一个月份的同一个月份。通过添加少一个月(上面的脚本中的-1
),您可以获得上个月的开头,然后您也可以将其与date
值进行比较,以获得books
的数量上个月。
sum
和group by
可以将您的数据“展平”为每username
个值的一行。