我有一个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中编写部分。
答案 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个。