查找在多个商店购物的客户

gev0vcfq  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(298)

我需要一个查询,将给我谁在过去3年内在多个商店购物的客户计数。
我已经制定了以下查询,但这不是我需要知道的:

SELECT STORE_ID, CUSTOMER_ID, COUNT(DISTINCT CUSTOMER_ID) as SERVICE_COUNT
From SALES INNER JOIN
     STORE_DETAILS
     ON trim(STORE_ID) = trim(STORE_ID)
WHERE (CURRENT_DATE - cast(SALE_DATE AS DATE format 'mm/dd/yyyy')) < 1095
ORDER BY 1,2
Group by 1,2
HAVING COUNT(DISTINCT SALE_DATE) > 1
ufj5ltwl

ufj5ltwl1#

如果您想在多个商店找到客户,那么可以选择以下方式:

SELECT CUSTOMER_ID
FROM SALES INNER JOIN
     STORE_DETAILS
     ON trim(STORE_ID) = trim(STORE_ID)
WHERE (CURRENT_DATE - cast(SALE_DATE AS DATE format 'mm/dd/yyyy')) < 1095
GROUP BY 1
HAVING COUNT(DISTINCT STORE_ID) > 1;

我不明白你的约会表情,但你大概知道它应该做什么。

9rnv2umw

9rnv2umw2#

基于您的评论优化了gordon的查询版本:
通常,store\u id后面有空格,不允许真正匹配
比较字符串会忽略尾随空格。只要没有前导空格(这是最坏的情况,应该在加载期间修复),就不必修剪(这对性能非常不利)。
销售日期的数据类型是日期
如果是约会就不需要演员阵容了。此外,三年内的逻辑可以简化,以避免对每一行的日期计算。

SELECT CUSTOMER_ID, COUNT(DISTINCT CUSTOMER_ID) as SERVICE_COUNT
FROM SALES 
JOIN STORE_DETAILS
  ON STORE_ID = STORE_ID
WHERE SALE_DATE >= ADD_MONTHS(CURRENT_DATE, -12*3)
GROUP BY 1
HAVING SERVICE_COUNT > 1
;

相关问题