每个用户达到的标记数量阈值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每个用户达到的标记数量阈值相关的知识,希望对你有一定的参考价值。

故事:两个条件:

  1. 我需要计算用户花费的天数20、50和100 $(基于他的register_date)>
  2. [如果某人的首次购买金额> 100美元,则3个阈值的天数相同。
  3. 我能够获得标记阈值的逻辑,但是对于第一次超过一个或两个阈值的用户,我还是很固执。

目标:

我需要计算他们达到20、50和100美元所需的天数。

当前查询:

我可能必须更改整个逻辑才能满足第二个条件,但是,是的,我陷入了困境。以下代码正确标记了达到阈值。
select
    user_id, register_date
    ,total
    ,order_date
    ,cumulative_sum
    ,threshold
    ,case 
        when threshold+LAG(threshold,1,0) over (partition by user_id order by order_date)=1 then 1
        when threshold+LAG(threshold,1,0) over (partition by user_id order by order_date)=3 then 2
        when threshold+LAG(threshold,1,0) over (partition by user_id order by order_date)=5 then 3
        else 0 end as flag
from (
    select
        user_id, register_date
        ,total
        ,order_date
        ,cumulative_sum
        ,case 
            When cumulative_sum>=100 then 3 
            When cumulative_sum>=50 then 2 
            When cumulative_sum>=20 then 1 else 0 end as threshold
    from (
        select 
            user_id, register_date
            ,(price*quantity) as total
            ,order_date 
            ,SUM(price*quantity) over (partition by user_id order by order_date asc) as cumulative_sum
        from #t1
    ) as base1
) as base2

数据:

CREATE TABLE #t1 (user_id int, price int, quantity int, order_date datetime,register_date datetime)
insert into #t1 values
(1,10,1,'2019-01-01 00:00:00.000','2019-01-01 00:00:00.000'),
(1,15,1,'2019-01-02 00:00:00.000','2019-01-01 00:00:00.000'),
(1,30,1,'2019-01-03 00:00:00.000','2019-01-01 00:00:00.000'),
(1,100,1,'2019-01-04 00:00:00.000','2019-01-01 00:00:00.000'),
(2,60,1,'2019-01-02 00:00:00.000','2019-01-01 00:00:00.000'),
(3,150,1,'2019-01-03 00:00:00.000','2019-01-01 00:00:00.000'),
(4,10,1,'2019-01-04 00:00:00.000','2019-01-01 00:00:00.000'),
(4,20,1,'2019-01-05 00:00:00.000','2019-01-01 00:00:00.000'),
(4,50,2,'2019-01-06 00:00:00.000','2019-01-01 00:00:00.000')

故事:两个条件:我需要根据用户的register_date计算用户花费20、50和100美元以上的天数,如果某人的首次购买> 100 $,那么该天数...

答案

仅使用条件聚合和datediff()

以上是关于每个用户达到的标记数量阈值的主要内容,如果未能解决你的问题,请参考以下文章

InfoWindow中的Android Google地图摘要自动更新

sentinel流控规则

如何优化C ++代码的以下片段 - 卷中的零交叉

SQL - 达到最小值/阈值后选择行

即使未达到测试覆盖率阈值,Karma-coverage 退出代码也始终为 0

Sharepoint 2010列表视图阈值和项级别权限