转载自https://blog.csdn.net/qq_27922171/article/details/86477544

同类别自动生成序列号:https://bbs.csdn.net/topics/392035580?locationNum=3&fps=1

--累计放款额度及件均用时
select
    hou.time as '时间段'
    ,isu.accum_loan_contract_amt as '累计放款额度'
    ,round(isu.issue_cost_time / isu.issue_finish_cnt) as '放款流程用时'
from dim_hour hou
left join (
    select
        isu.loan_contract_amt
        ,isu.issue_finish_cnt
        ,coalesce(isu.issue_cost_time,0) as issue_cost_time
        ,case
            when @time is null then @accum_loan_contract_amt:=isu.loan_contract_amt
            else @accum_loan_contract_amt:=@accum_loan_contract_amt + isu.loan_contract_amt
  end as accum_loan_contract_amt
        ,@time:=isu.time as time
    from (select @time:=null, @accum_loan_contract_amt:=null)s,
 (
        select
            hou.time
            ,sum(case when date(isu.loan_issue_time) = curdate() then isu.loan_contract_amt else 0 end) as loan_contract_amt
            ,count(case when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate() then isu.split_order_id else null end) as issue_finish_cnt
            ,sum(case
                 when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate()
                     then timestampdiff(second,isu.loan_issue_submit_time, coalesce(isu.loan_issue_time,isu.loan_issue_fail_time))
                 else null end) as issue_cost_time
        from dim_hour hou
        left join (
            SELECT * from pl_performance_loan_apply_fact where date(coalesce(loan_issue_time,loan_issue_fail_time)) = curdate()
        )isu on DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') >= hou.`time` and DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') < hou.due_time
        join (select time from dim_hour where start_time <= DATE_FORMAT(now() , '%H:%i:%s') and DATE_FORMAT(now(), '%H:%i:%s') < end_time) dim on hou.time <= dim.time
        group by hou.time
        order by hou.time
    )isu
)isu on isu.time = hou.time
;
 
 
--工作时间,不分类生成序列号
SELECT  tot.collect_user_name AS `催收员`, sum(tot.collect_diff)/3600 AS `工作时间`
FROM
(
SELECT tot.collect_user_name
, CASE WHEN TIMESTAMPDIFF(SECOND, par.`collect_time`, tot.`collect_time`) > 1800 THEN NULL ELSE TIMESTAMPDIFF(SECOND, par.`collect_time`, tot.`collect_time`) END AS collect_diff
FROM
(
SELECT tot.*,  @collect_series:= @collect_series + 1 AS collect_series  
FROM ( 
    SELECT collect_user_name, collect_time FROM pl_collect_call_info cat
   
    ORDER BY collect_user_name, collect_time
) tot, ( SELECT @collect_series:=-1 )s
) tot
LEFT JOIN (
SELECT tot.*,  @collect_series_2:= @collect_series_2 + 1 AS collect_series_2    
FROM ( 
    SELECT collect_user_name, collect_time FROM pl_collect_call_info cat
    ORDER BY collect_user_name, collect_time
) tot, ( SELECT  @collect_series_2:=0 )s
) par ON tot.collect_series = par.collect_series_2 AND par.`collect_user_name` = tot.`collect_user_name`
WHERE par.collect_user_name IS NOT NULL
) tot
GROUP BY tot.collect_user_name
;
 
--工作时间,方法2,分类生成序列号
SELECT collect_user_name, collect_time,NO
FROM
(
SELECT t.*,
       CASE WHEN @partition_by = t.collect_user_name THEN @rownum := @rownum + 1
            ELSE @rownum :=1
       END AS NO,
       @partition_by := t.collect_user_name AS partition_by
FROM ( 
    SELECT collect_user_name, collect_time FROM pl_collect_call_info cat
    WHERE  date(cat.collect_time) = curdate()
                     
    #ORDER BY collect_user_name, collect_time
) t
INNER JOIN (SELECT @rownum :=0) r
        ON 1=1
INNER JOIN (SELECT @partition_by :='') p
        ON 1=1
ORDER BY t.collect_user_name, t.collect_time
)tb
;
 
--注册人数分布(时间段),按时间分类
SELECT
    sls.time as `时间段`
    ,case when sls.time > hou.time then null else sls.cust_cnt          end as `分段注册人数`
    ,case when sls.time > hou.time then null else sls.accum_cust_cnt    end as `累计注册人数`
from (
    select
        dtl.cust_cnt #as `分段注册人数`
        ,case
            when @time is null then @accum_cust_cnt:=dtl.cust_cnt
            else @accum_cust_cnt:=@accum_cust_cnt + dtl.cust_cnt end
            as accum_cust_cnt #`累计注册人数`
        ,@time:=dtl.time as time #`时间段`
    from (select @time:=null, @accum_cust_cnt:=null)s, (
        select
            hou.time
            ,count(distinct usb.user_id) as cust_cnt
        from dim_hour hou
        left join (
            select usb.user_id,usb.regist_time from pl_customer_basic_info usb
            where date(usb.regist_time) = curdate() 
        )usb on DATE_FORMAT(usb.regist_time, '%H:%i:%s') >= hou.`time` and DATE_FORMAT(usb.regist_time, '%H:%i:%s') < hou.due_time
        group by hou.time
        order by hou.time
    )dtl
)sls
left join (
    select * from dim_hour
    where start_time <= DATE_FORMAT(now(), '%H:%i:%s')
        and DATE_FORMAT(now(), '%H:%i:%s') < end_time
) hou on 1=1
;
--注册人数分布(时间段),按公司、马甲、时间分类
SELECT cpy.company
    ,sls.merchant_no
    ,sls.time as period
    ,case when sls.time > hou.time then null else sls.cust_cnt          end as rgs_cnt
    ,case when sls.time > hou.time then null else sls.accum_cust_cnt    end as accum_rgs_cnt
from (
    select dtl.time
        ,dtl.cust_cnt #as `分段注册人数`
        ,CASE
WHEN @merchant_no IS NULL THEN @accum_cust_cnt:=dtl.cust_cnt
WHEN @merchant_no != merchant_no2 THEN @accum_cust_cnt:=dtl.cust_cnt
ELSE @accum_cust_cnt:=@accum_cust_cnt + dtl.cust_cnt END
AS accum_cust_cnt #`累计注册人数`
        ,@merchant_no:=dtl.merchant_no2 as merchant_no #`时间段`
    from (select @merchant_no:=null, @accum_cust_cnt:=null)s, (
        select
            hou.time,usb.merchant_no,usb.merchant_no2
            ,count(distinct usb.user_id) as cust_cnt
        from dim_hour hou
        left join (
            select usb.user_id,usb.regist_time ,usb.merchant_no,usb.merchant_no as merchant_no2
   from (select * from pl_customer_basic_info usb where date(usb.regist_time) = curdate()) usb
            left join dim_company_app cpy on usb.merchant_no=cpy.merchant_no
        )usb on DATE_FORMAT(usb.regist_time, '%H:%i:%s') >= hou.`time` and DATE_FORMAT(usb.regist_time, '%H:%i:%s') < hou.due_time
        group by hou.time,usb.merchant_no,merchant_no2
        order by usb.merchant_no,hou.time
    )dtl
)sls
left join (
    select * from dim_hour
    where start_time <= DATE_FORMAT(now(), '%H:%i:%s')
        and DATE_FORMAT(now(), '%H:%i:%s') < end_time
) hou on 1=1
left join dim_company_app cpy on sls.merchant_no=cpy.merchant_no
where sls.merchant_no is not null
order by merchant_no,period
;
 
--累计放款额度,按时间分类
select
    hou.time as '时间段'
    ,isu.accum_loan_contract_amt as '累计放款额度'
    ,round(isu.issue_cost_time / isu.issue_finish_cnt) as '放款流程用时'
    ,round(isu.issue_cost_time_v2 / isu.issue_finish_cnt) as '放款流程用时v2'
from dim_hour hou
left join (
    select
        isu.loan_contract_amt
        ,isu.issue_finish_cnt
        ,coalesce(isu.issue_cost_time,0) as issue_cost_time
        ,case
            when @time is null then @accum_loan_contract_amt:=isu.loan_contract_amt
            else @accum_loan_contract_amt:=@accum_loan_contract_amt + isu.loan_contract_amt end
             as accum_loan_contract_amt
        ,coalesce(isu.issue_cost_time_v2,0) as issue_cost_time_v2
        ,@time:=isu.time as time
    from (select @time:=null, @accum_loan_contract_amt:=null)s, (
        select
            hou.time
            ,sum(case when date(isu.loan_issue_time) = curdate() then isu.loan_contract_amt else 0 end) as loan_contract_amt
            ,count(case when date(isu.loan_issue_submit_time) = curdate() then isu.split_order_id else null end) as issue_finish_cnt
            ,sum(case
                 when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate()
                     then timestampdiff(second,isu.loan_issue_submit_time, coalesce(isu.loan_issue_time,isu.loan_issue_fail_time))
                 else null end) as issue_cost_time
             ,sum(case
                 when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate()
                     then timestampdiff(second,isu.loan_issue_submit_time, coalesce(isu.loan_issue_time,isu.loan_issue_fail_time))
             when date(isu.loan_issue_submit_time)= curdate() and isu.loan_issue_time is null and isu.loan_issue_fail_time is null
                 then timestampdiff(second,isu.loan_issue_submit_time, now())
                 else null end) as issue_cost_time_v2
        from dim_hour hou
        left join (
            SELECT * from pl_performance_loan_apply_fact where date(coalesce(loan_issue_time,loan_issue_fail_time)) = curdate()
        )isu on DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') >= hou.`time` and DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') < hou.due_time
        join (select time from dim_hour where start_time <= DATE_FORMAT(now() , '%H:%i:%s') and DATE_FORMAT(now(), '%H:%i:%s') < end_time) dim on hou.time <= dim.time
        group by hou.time
        order by hou.time
    )isu
)isu on isu.time = hou.time
;
 
--累计放款额度,按公司、时间分类
select isu.company
    ,hou.time
 ,isu.loan_contract_amt
 ,isu.accum_loan_contract_amt
    ,isu.issue_cost_time
    ,isu.issue_cost_time_v2
    ,isu.issue_finish_cnt
from dim_hour hou
left join (
    select
        isu.loan_contract_amt
        ,isu.issue_finish_cnt
        ,coalesce(isu.issue_cost_time,0) as issue_cost_time
      
  ,case
      WHEN @company IS NULL THEN @accum_loan_contract_amt:=isu.loan_contract_amt
            WHEN @company != company2 THEN @accum_loan_contract_amt:=isu.loan_contract_amt
            ELSE @accum_loan_contract_amt:=@accum_loan_contract_amt + isu.loan_contract_amt END
            AS accum_loan_contract_amt 
        ,coalesce(isu.issue_cost_time_v2,0) as issue_cost_time_v2
  ,@company:=isu.company2 as company
    ,isu.time  
    from (select @company:=null,@accum_loan_contract_amt:=null)s, (
        select cpy.company,cpy.company as company2
            ,hou.time
            ,sum(case when date(isu.loan_issue_time) = curdate() then isu.loan_contract_amt else 0 end) as loan_contract_amt
            ,count(case when date(isu.loan_issue_submit_time) = curdate() then isu.split_order_id else null end) as issue_finish_cnt
            ,sum(case
                 when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate()
                     then timestampdiff(second,isu.loan_issue_submit_time, coalesce(isu.loan_issue_time,isu.loan_issue_fail_time))
                 else null end) as issue_cost_time
             ,sum(case
                 when date(coalesce(isu.loan_issue_time,isu.loan_issue_fail_time)) = curdate()
                     then timestampdiff(second,isu.loan_issue_submit_time, coalesce(isu.loan_issue_time,isu.loan_issue_fail_time))
             when date(isu.loan_issue_submit_time)= curdate() and isu.loan_issue_time is null and isu.loan_issue_fail_time is null
                 then timestampdiff(second,isu.loan_issue_submit_time, now())
                 else null end) as issue_cost_time_v2
        from dim_hour hou
        left join (
            SELECT * from pl_performance_loan_apply_fact where date(coalesce(loan_issue_time,loan_issue_fail_time)) = curdate()
        )isu on DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') >= hou.`time` and DATE_FORMAT(isu.loan_issue_time, '%H:%i:%s') < hou.due_time
        join (select time from dim_hour where start_time <= DATE_FORMAT(now() , '%H:%i:%s') and DATE_FORMAT(now(), '%H:%i:%s') < end_time) dim on hou.time <= dim.time
  join pl_customer_basic_info usb on isu.user_id=usb.user_id
  join dim_company_app cpy on usb.merchant_no=cpy.merchant_no
        group by cpy.company,hou.time
        order by cpy.company,hou.time
    )isu
)isu on isu.time = hou.time
;

SELECT (@i :=@i + 1)生成序列号的更多相关文章

  1. springMVC使用与生成序列号

    springMVC使用与生成序列号 我是以springMVC的方式提供序列号 代码可以直接在项目中用 第一步:controller类 @Autowired private PkGenerator pk ...

  2. 利用ir.sequence自动生成序列号

    利用ir.sequence自动生成序列号 什么是序列号 可以这么理解,我有一个产品序号,编码的前缀是SOP,后缀是0001~9999的序号,没生成一个产品就自动流水加一,序列号不会重复,odoo中的i ...

  3. SQL Server 怎样生成序列号(虚拟数字辅助表)

    </pre><pre name="code" class="sql">--生成一个"序列" 或者说生成一个" ...

  4. Idea为类生成序列号(十一)

    新建一个测试的实体类Gradle,实现java.io.Serializable接口,选择类名,按Alt+Enter键,出现的提示框中没有生成serialVersionUID的提示,这个需要设置之后才会 ...

  5. 使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号

    Redis INCR命令 用于由一个递增key的整数值.如果该key不存在,它被设置为0执行操作之前.如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误.该操作被限制为64位带符号 ...

  6. mysql查询结果自动生成序列号

  7. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Software Protector序列号生成组件.今天就通过一篇简单的文章来预览一下其强大的功 ...

  8. 如何用JAVA生成注册序列号

    原文:http://blog.csdn.net/eagleking012/article/details/7099900 平常我们都接触过软件注册,输入序列号.激活码.注册码.授权码:对于这些字符码到 ...

  9. 一个shell脚本给客户使用服务器生成一个序列号

    #!/bin/bash interface=`ls /sys/class/net|grep en|awk 'NR==1{print}'` if [ ! -e /etc/adserver/.seq.in ...

随机推荐

  1. swoole是如何实现任务定时自动化调度的?

    https://www.muzilong.cn/article/117 开发环境 环境:lnmp下进行试验. 框架:laravel5 问题描述 这几天做银行对帐接口时,踩了一个坑,具体需求大致描述一下 ...

  2. 版本控制git之三-多人协作 变基 推送 拉取 删除远程分支

      版本控制git之三-多人协作 wangfeng7399已关注0人评论350人阅读2019-02-20 21:33:08   如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源 ...

  3. 06_Spring JDBCTemplate

    Spring对不同持久化技术的支持 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate Hibernate3.0 org.spri ...

  4. centos7服务器常见安装包准备

    内核相关配置 https://github.com/digoal/blog/blob/master/201611/20161121_01.md# vi /etc/sysctl.conf # add b ...

  5. Python-爬虫实战 简单爬取豆瓣top250电影保存到本地

    爬虫原理 发送数据 获取数据 解析数据 保存数据 requests请求库 res = requests.get(url="目标网站地址") 获取二进制流方法:res.content ...

  6. Java虚拟机原理图解-- 1.2、class文件中的常量池

    了解JVM虚拟机原理 是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给 ...

  7. 转:PLL 锁相环

    原地址:http://fangjian0518.blog.163.com/blog/static/559196562011210103455430/  PLL的作用? 答:LPC2000系列ARM内部 ...

  8. PAT甲级——A1047 Student List for Course

    Zhejiang University has 40,000 students and provides 2,500 courses. Now given the registered course ...

  9. jmeter是什么

    Apache JMeter 是Apache 组织开发的基于 Java 的压力测试工具: 适用的测试领域:地方 用于对软件做压力测试,它可以用于测试静态和动态资源,例如:静态文件,Java 小程序.CG ...

  10. python学习之路-day1

    1 变量 赋值:变量可以是字符串.序列.元组. # author:hams.ali # 界面 line = '-*'*20 # 数字直接可以计算 _var1 = ' # 字符变量拼接 _var_2 = ...