我有两张看起来像这样的表
客户表
first last cust_id
John Doe 0
Jane Doe 1
分类帐表
posted_date cust_id
2014-01-14 0
2014-01-20 0
2013-12-20 0
2013-12-20 1
2013-11-12 1
2013-11-10 1
我需要计算客户至少发布一次交易的月数,这在过去的12个月中被称为CustomerMonths。这意味着每个cust_id的CustomerMonths都在0到12之间。所以对于这个数据,我希望看到
cust_id CustomerMonths
0 2
1 2
这是因为cust_id 0在2014年1月至少一次,至少在2013年12月一次 同样,cust_id 1在2013年12月至少一次,2013年11月至少一次 对于cust_id 0的示例:
2014-01-14,
2014-01-20 = 1 CustomerMonths
2013-12-20 = 1 CustomerMonths
因此,cust_id 0的过去12个月的总CustomerMonth为2。
我有一个月的工作,但不知道如何让这个工作在过去12个月。虽然我已经满足于它在过去两个月的工作。我想我可以弄清楚其余部分。这就是我所拥有的。
select distinct
c.cust_id,
(case when count(lJan.posted_date) = 0 then 0 else
case when count(lJan.posted_date) > 0 then 1 end end) as CustomerMonths
from 'customer' c
left join 'ledger' lJan on (lJan.cust_id = c.cust_id and lJan.posted_date between '2014-01-01' and '2014-01-31')
group by c.cust_id
答案 0 :(得分:0)
您需要计算不同的月份,因此请使用count(distinct)
。问题是论证是什么。试试这个:
select c.cust_id,
count(distinct year(l.posted_date) * 100 + month(l.posted_date)) as CustomerMonths
from customer c left join
ledger l
on l.cust_id = c.cust_id and
l.posted_date between '2013-01-01' and '2014-01-31'
group by c.cust_id;
撰写select
的另一种方式:
select c.cust_id,
count(distinct date_format(l.posted_date, '%Y-%m')) as CustomerMonths