2016-07-26 8 views
0

私は、各行にタイムスタンプ、アカウントID、およびアカウントAの金額(ドル)を含むMySQLテーブル(Amazon Aurora)アカウントB.行の(ドル)量のようになります。各タイムスタンプのために2つの他の列の合計に基づいて各キーの上位N個の項目を検索

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

行は1つだけです。だから問題は何ですか? – Strawberry

+0

その1行が例示的な行です。データベースには多くの行があります。 – turtle

+0

好きな場合は、以下の簡単な2ステップのアクションを実行してください。1.まだ実行していない場合は、適切なCREATEおよびINSERTステートメント(および/またはsqlfiddle)を提供して、問題をより容易に複製できるようにします。 2.まだ実行していない場合は、手順1で提供された情報に対応する望ましい結果セットを入力します。 – Strawberry

答えて

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; 

これは明らかではありません。上の公式は、ほとんどすべての他のデータベースで利用可能な関数を模倣する変数を使用しています。

各タイムスタンプの行を列挙します。外側のクエリは、単に各タイムスタンプの上位10を選択します。

+0

Wow。助けてくれてありがとう。これはかなり複雑で、私はまだすべての変数の割り当てを理解していません。私はこのステートメントを実行しようとしたが、私はトップ10カウントを取得しますが、個々のタイムスタンプのトップ10カウントは取得しません。 – turtle

+0

Amazon AuroraでMySQLを使用しています。 – turtle

+0

タイムスタンプは*正確に同じですか?また、 '='対 ':='に注意してください。 –

関連する問題