我的数据在销售表中
ACCT_ID |REGION | DATE_FILTER | SALES
1001 | TEXAS | 2018-01 | 10
1002 | DENV | 2018-01 | 30
1004 | WDC | 2018-01 | 50
1001 | TEXAS | 2018-02 | 500
1002 | DENV | 2018-02 | 300
1004 | WDC | 2018-02 | 120
我想通过销售额找出一个地区每个帐户每月的排名,我的输出看起来像
ACCT_ID |REGION | DATE_FILTER | SALES | Rank
1001 | TEXAS | 2018-01 | 10 |3
1002 | DENV | 2018-01 | 30 |2
1004 | WDC | 2018-01 | 50 |1
1001 | TEXAS | 2018-02 | 500 |1
1002 | DENV | 2018-02 | 300 |2
1004 | WDC | 2018-02 | 120 |3
我用的是Mysql 5.7版本,下面我试过了
SELECT
ACCT_ID ,REGION,SALES,DATE_FILTER,n RANK
FROM
( SELECT @prev := '', @n := 0 ) init
JOIN
( SELECT @n := if(DATE_FILTER != @prev_rpt_mnth and REGION != @prev_reg, 1, @n + 1) AS n, /* HERE I AM USING TWO COLUMNS TO GROUP BY */
@prev_rpt_mnth := DATE_FILTER,
@prev_reg := REGION
ACCT_ID ,REGION,SALES,DATE_FILTER,UNITS
FROM SALES
ORDER BY
DATE_FILTER,REGION ASC,
UNITS DESC
LIMIT 999999
) x
WHERE n <= 5
ORDER BY DATE_FILTER,REGION, n;
我也得到了重复,它没有根据销售额正确排名。我哪里出错了,还有其他有效的方法。
您必须在使用它们的级别上初始化所有变量。在您的情况下 - 在子查询数据源中。- 秋名