【问题标题】:mysql trying to rank rows by order bymysql试图按顺序排列行
【发布时间】:2019-01-14 03:20:03
【问题描述】:

我想计算我的行的排序排名。它计算不正确 - 我只得到一个空值和 1。我希望根据我的连接/顺序按 ladder_name_lh2 = ladder_name_lh1 和 date_trigger_event_lh2 和 member_id_lh1 获得 1、2、3 的排名。

基本上,我想说的是 如果 ladder_name_2 与 ladder_name_1 匹配(这是设置之前/之后 - 阶梯 2 在阶梯 1 之后,并且有 6 个阶梯名称(类别),但为了说明它们是相关的,我想确保排名只有在匹配之前和之后的类别时才会生成),然后根据 date_2、member_id 生成排名。

我写了以下内容:

select 
        cte_ladder_history_self_join_lh1.member_id_lh1,
        cte_ladder_history_self_join_lh1.ladder_config_id_lh1,
        cte_ladder_history_self_join_lh1.trigger_name_lh1,
        cte_ladder_history_self_join_lh1.trigger_record_id_lh1,
        cte_ladder_history_self_join_lh1.date_trigger_event_lh1,
        cte_ladder_history_self_join_lh1.ladder_name_lh1,
        cte_ladder_history_self_join_lh1.ladder_value_lh1,
        cte_ladder_history_self_join_lh1.ladder_change_lh1,
        cte_ladder_history_self_join_lh2.member_id_lh2,
        cte_ladder_history_self_join_lh2.trigger_name_lh2,
        cte_ladder_history_self_join_lh2.trigger_record_id_lh2,
        cte_ladder_history_self_join_lh2.date_trigger_event_lh2,
        cte_ladder_history_self_join_lh2.ladder_name_lh2,
        cte_ladder_history_self_join_lh2.ladder_value_lh2,
        cte_ladder_history_self_join_lh2.ladder_change_lh2,
        datediff(cte_ladder_history_self_join_lh2.date_trigger_event_lh2,cte_ladder_history_self_join_lh1.date_trigger_event_lh1) as days_spent,
        @member_id:=member_id_lh2 AS member_id,
        @row_number:=(CASE
                WHEN @member_id = member_id_lh1
                THEN @row_number + 1
                ELSE 1
            END) AS rank 

    from 
        cte_ladder_history_self_join_lh1 #previous or current ladder history 
            left join cte_ladder_history_self_join_lh2 on cte_ladder_history_self_join_lh1.member_id_lh1 = cte_ladder_history_self_join_lh2.member_id_lh2
                and cte_ladder_history_self_join_lh2.ladder_name_lh2 = cte_ladder_history_self_join_lh1.ladder_name_lh1
                and cte_ladder_history_self_join_lh1.ladder_value_lh1 <> cte_ladder_history_self_join_lh2.ladder_value_lh2
                and cte_ladder_history_self_join_lh1.date_trigger_event_lh1 < cte_ladder_history_self_join_lh2.date_trigger_event_lh2 # lh2 shows second begin date / end date for lh if exists
        order by date_trigger_event_lh2 desc, member_id_lh1 desc; 

返回以下内容:

我不确定为什么排名不能正常工作。我希望排名在 1 到 20 之间(基于符合此人的 ladder_name = 倡导标准的行数),但我得到了一些截然不同的数字。

想法?

【问题讨论】:

    标签: mysql sql-order-by ranking


    【解决方案1】:

    固定排名代码阅读:

    CREATE TEMPORARY TABLE cte_leenk_ladder_history_rank
        SELECT * ,
        @row_number:=(CASE
        WHEN @member_id = member_id
        THEN @row_number + 1
        ELSE 1
        END) AS rank,
        @member_id := member_id
    
        FROM 
        cte_leenk_ladder_history_order
        where ladder_change = 1
        order by salesforce_id desc, date_trigger_event desc;
    

    【讨论】:

    • 很高兴你能成功。您可以(并且应该)接受自己的答案来结束问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多