Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql排名行结果_Mysql_Sql_Rank_Row Number - Fatal编程技术网

Mysql sql排名行结果

Mysql sql排名行结果,mysql,sql,rank,row-number,Mysql,Sql,Rank,Row Number,我正在尝试添加一个新的列,它按日期显示行结果的排名(或序列) 我写过: SELECT @row_number:=(CASE WHEN @member_id = lh.member_id and lc.ladder_advocacy is not null THEN @row_number + 1 when @member_id = lh.member_id and lc.ladder_advocacy is null then "null" ELSE

我正在尝试添加一个新的列,它按日期显示行结果的排名(或序列)

我写过:

 SELECT 
@row_number:=(CASE
    WHEN @member_id = lh.member_id and lc.ladder_advocacy is not null 
        THEN @row_number + 1
    when @member_id = lh.member_id and lc.ladder_advocacy is null then "null"
    ELSE 1 /* there is an error here - i need it to return a 1 if not null, then 2 for the 2nd instance, etc */ 
END) AS rank_advocacy,
@member_id:=lh.member_id AS member_id,
lh.ladder_change,
lc.name,
lc.ladder_advocacy,
lc.ladder_elected,
lc.ladder_policy,
lc.ladder_engagement,
lc.ladder_newventure,
lc.ladder_collective,
lc.is_trigger
FROM
leenk_ladder_history AS lh
    LEFT JOIN
leeds_so.leenk_ladder_config AS lc ON lh.ladder_config_id = lc.id
WHERE
ladder_change = 1 AND trigger_active = 1
ORDER BY member_id, trigger_event_date DESC; 
第4行出现错误,我不确定如何修复。对于第一个结果,我希望返回1。对于第二个结果,我希望返回@row_number+1。第三个结果,@row_number+2(依此类推)


如何实现这一点?

我不明白如何使用条件
lc.ladder\u>不是空的。但是,基本结构是:

SELECT (@row_number = IF(@member_id = lh.member_id, @row_number + 1
                         IF(@member_id := lh.member_id, 1, 1)
                        )
       ) as rank_advocacy,
       lh.ladder_change,
       . . .
一些非常重要的观点:

  • 您需要在同一个表达式中分配
    @member\u id
    @row\u number
    。MySQL(与所有其他数据库一样)不保证表达式的求值顺序
  • 在MySQL的最新版本中,我认为需要在子查询中使用
    orderby
    ,在外部查询中使用变量表达式

示例数据和期望的结果确实会有帮助。相同的数据和期望的结果使这些问题更容易回答。有时很难仅从一个不完全符合您要求的查询开始。此外,您会收到什么错误消息?在MySQL中模拟窗口函数在SO中有相当广泛的介绍。好的。现在如果我想得更多,我需要回到绘图板,在我带着更多的问题回来之前进行修改。