2016-07-21 11 views
4

ここにテーブルを挿入する最大日付でグループ化されたcurrency_priceテーブルの行を見つけるSQLクエリです。私の質問は、秒の最大値を見つける方法です。私は、各グループに第2の最大行を見つけるために、このクエリを変更する方法を意味する。私のクエリの2番目の最大値を見つける方法

select currency_id,buy,sell 
from (select * from currency_price order by `currency_id`, cu_date desc,buy,sell) x 
group by `currency_id` 

このクエリで私は販売を持っており、各IDの購入例えばので、私は各IDの行を見つけたの.exm :

id sell buy 
1000 500 480 
1001 20 19 
... 

ただし、ここでは、各IDの2番目の最大日を指定します。

私は2番目の最大値を見つけるためにいくつかのクエリを知っていますが、すべて私の答えに私を連れていません。

+0

私はmysqlを使用してPHPのクエリを使用して5.5 –

+0

あなたは取得したいものの完全な最小限のテーブルと結果セットを与えることができますか? –

答えて

1

MySqlの場合は、LIMIT 1,1を使用します。 #は、行[RECで始まる] 1-取得[RECのカウントをフェッチ] 1

http://dev.mysql.com/doc/refman/5.7/en/select.html

+0

それは私のために働いていません。ちょうど1行を取得します。 –

+0

これは単なる例です。あなたの必要条件に1,1を加えてください。 –

+0

@MangeshSatheINDあなたは詳しく教えていただけますか? – manetsus

0

利用ROW_NUMBER()あなたが手動でグループの順序を追加することができます

サンプル

SELECT * FROM 
(
SELECT *,ROW_NUMBER() OVER (ORDER BY AGE DESC) RNUM FROM TEST_TABLE 
) QUERY1 WHERE RNUM=2 
+1

から始まります。Mysqlはrow_numberを持っていません –

+0

もっとexplaneできますか? –

+0

申し訳ありませんが、Timが正しく指摘しているとおり、これはあなたの状況には関係ありません。私の解決策は、MySQLではなくSQL Server用です。 –

0

最初の注文クエリ&に番号を入力し、各行から2番目を選択します。

内部クエリでは、必要に応じて注文番号&が1から始まる行に番号を付け、currency_idが変更されるたびにリセットされます。

set @num := 0, @ci := -1; 

select currency_id,buy,sell 
from 
    (select *, 
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number, 
    @ci := currency_id as dummy 
    from currency_price 
    order by `currency_id`, cu_date desc,buy,sell) x 
where gp_number=2 

これは、次のようにワークベンチからストアドプロシージャに入れることができます

DELIMITER $$ 
CREATE PROCEDURE SecondMaximum() 
BEGIN 
set @num := 0, @ci := -1; 

select currency_id,buy,sell 
from 
    (select *, 
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number, 
    @ci := currency_id as dummy 
    from currency_price 
    order by `currency_id`, cu_date desc,buy,sell) x 
where gp_number=2; 
END$$ 

DELIMITER ; 

そしてPHPからあなたが実行し、 "CALL SecondMaximumを();"

テーブルおよび/またはフィールドを変更できるようにするには、これらを文字列変数としてプロシージャに渡すことができます。& create &ストアドプロシージャ内でプリペアドステートメントを実行します。ちょうどそれらのチュートリアルのためのGoogleの検索を行います。

+0

私はどのようにPHPで使用できますか? –

+0

質問が書かれていますが、私はphp code.itでphpmyadminまたはworkbenchを使用しています。 –

+0

ストアドプロシージャを作成してから呼び出すことができます。 – PaulF

関連する問題