weixin_41993251
weixin_41993251
采纳率38.5%
2018-04-25 07:39

SQL 周期计算 消除重复日期

5
已采纳

我有一张化妆品的消费清单,清单记录了顾客消费乳液,日霜,眼霜的时间,金额,品牌.
现在我需要计算乳液的消费周期,遇到了这样一个问题:
同一顾客可能在同一天会消费同一款乳液两次,在计算消费周期的时候如果我把这两次都计算进去就会影响我的最后周期的准确性,导致周期变小.
求问各位大神我应该怎么改我的代码?

这是我写的不成熟的代码:
select avg(t.消费周期) from(
SELECT 客户卡号,count(客户卡号) as count,datediff(dd,min(营业日期),max(营业日期))*1.0/(count(客户卡号)-1)as 消费周期
FROM hfbns
WHERE [产品] like '%乳液%'
GROUP BY 客户卡号
having count(客户卡号)>1

and
min(营业日期)<>max(营业日期)) t

[img=https://img-bbs.csdn.net/upload/201804/25/1524642000_984968.png][/img]

我先计算了每一个顾客在过去的两年里消费乳液的周期,然后再算所有顾客的平均值,来得到整体的消费周期。不知道这种方法是否合理。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • qinxueyuan qinxueyuan 3年前

    合不合理要看你对消费周期怎么定义,这个应该不是技术实现讨论的范畴
    如果你觉得两次消费只计一次比较合理,那就用dinstinct只保留一条记录
    select avg(t.消费周期) from(
    SELECT 客户卡号,count(客户卡号) as count,datediff(dd,min(营业日期),max(营业日期))*1.0/(count(客户卡号)-1)as 消费周期
    FROM (select distinct 客户卡号,营业日期 from hfbns
    WHERE [产品] like '%乳液%' ) aa
    GROUP BY 客户卡号
    having count(客户卡号)>1

    ) t

    你的语句中 min(营业日期)<>max(营业日期) 也是一种方法,但结果有差异,比如第一天消费1次,第二天消费两次,你这个的消费周期是1/3,而用distinct 计算结果是1/2,哪个都可以说合理,理解不同

    点赞 1 评论 复制链接分享
  • sxdfzl321 sxdfzl321 3年前

    distinct这个思路可以试试

    点赞 1 评论 复制链接分享
  • qq_41138477 啦啦啦啦啦0 3年前

    你的语句中 min(营业日期)<>max(营业日期) 也是一种方法,但结果有差异,比如第一天消费1次,第二天消费两次,你这个的消费周期是1/3,而用distinct 计算结果是1/2,哪个都可以说合理,理解不同

    点赞 评论 复制链接分享

相关推荐