**是否有一种方法可以计算在特定列中看到了多少个字符串
由于第2列中的值有时由于某些客户在不同时间进行几次交易(客户可以在第一个月进行交易,然后在第二年晚些时候进行交易)而重复出现。 我有什么办法可以计算一个分组中每个月每个月有多少个全新的ID(以前从未见过)?
如果您需要更多背景信息,请告诉我。 谢谢!
答案 0 :(得分:0)
首先,您应将每个ID与年和月相关联,这是全新的,然后进行计数,然后按年和月分组:
SELECT count(*) as new_customers, extract(year from t1.date) as year,
extract(month from t1.date) as month FROM table t1
WHERE not exists (SELECT 1 FROM table t2 WHERE t1.id==t2.id AND t2.date<t1.date)
GROUP BY year, month;
您的结果将包含新客户数,年份和月份
答案 1 :(得分:0)
您可以执行以下操作,为该特定customer_id唯一的每个交易分配一个等级(因此,排名1表示这是该customer_id的第一笔订单)
上面的内容包含在内嵌视图中,然后查询内嵌视图,仅在排名为1的情况下为您提供月份和该月的客户ID计数。
我已经在Oracle上测试过,并且可以正常工作。
SELECT DISTINCT
EXTRACT(MONTH FROM date_of_transaction) AS month,
COUNT(customer_id)
FROM
(
SELECT
date_of_transaction,
customer_id,
RANK() OVER(PARTITION BY customer_id
ORDER BY
date_of_transaction ASC
) AS rank
FROM
table_1
)
WHERE
rank = 1
GROUP BY
EXTRACT(MONTH FROM date_of_transaction)
ORDER BY
EXTRACT(MONTH FROM date_of_transaction) ASC;
答案 2 :(得分:0)
一种简单的方法是两个级别的聚合。内部级别为每个客户获取第一个日期。外部按年份和月份进行汇总:
select year(min_date), month(min_date), count(*) as num_firsts
from (select customerid, min(date) as min_date
from t
group by customerid
) c
group by year(min_date), month(min_date)
order by year(min_date), month(min_date);
请注意,日期/时间功能取决于您所使用的数据库,因此从日期中获取年/月的语法在您的数据库中可能会有所不同。