根据其他2列的总和查找每个键的前N个项目

时间:2016-07-26 10:42:39

标签: mysql sql

我有一个MySQL表(Amazon Aurora),其中每一行都包含帐号A的时间戳,帐号ID和金额(以美元计)以及帐户B的金额(以美元计)。行如下所示:< / p>

1462791600     123     100     200 

对于每个时间戳,我想找到前10个发票(账户A + B的美元金额最高的发票)。我可以在MySql中执行此操作吗?我没有太多的SQL经验,但这就是我想要做的事情:

SELECT ts, id, account_A + account_B AS account_sum
FROM table
GROUP BY ts
ORDER BY account_sum
LIMIT 10

上述SQL的问题在于它并没有为每个时间戳给我一个前10名。我不知道如何在SQL中编写部分。

1 个答案:

答案 0 :(得分:0)

我不明白为什么这个查询需要group by。但是,在MySQL中执行此操作很棘手。这是一个使用变量的方法:

SELECT t.*
FROM (SELECT t.*,
             (@rn := if(@ts = ts, @rn + 1,
                        if(@ts := ts, 1, 1)
                       )
             ) as rn
      FROM table t CROSS JOIN
           (SELECT @rn := 0, @ts := -1) params
      ORDER BY ts, (account_A + account_B) DESC
     ) t
WHERE rn <= 10;

这并不明显。上面的公式使用变量来模仿几乎所有其他数据库中可用的ROW_NUMBER()函数。

它枚举每个时间戳的行。外部查询只选择每个时间戳的前10个。