2016-11-03 16 views
-1

2と3のコードを選択する必要があります。PHPで2番目と3番目に高い値と最後の項目を選択するMySQLクエリ

SNO Userid Price 

1 1004 10 
2 1002 20 
3 1001 300 
4 1003 700 
5 1002 80 
6 1001 50 

今、私は1001年、1002年、1003年のための最後のエントリの価格を選択する必要があり、1004

結果:

1001 - 50, 1002 - 80, 1003 -700, 1004 -10. 

二番目に高い値が80ユーザー1002 第三であります最高値は50ユーザーです1001

答えて

1

Mmm、わかりませんが、これを試してみてください:

SELECT t.* 
FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE t.userid = s.userid 
        AND s.sno > t.sno) 
ORDER BY t.price DESC 
LIMIT 2 
+0

ありがとうございました。ユーザーが最後に入札額を選択する必要があるのは、選択するだけです。 ExユーザA = 100、ユーザB = 200、ユーザA = 300、ユーザC = 300、ユーザA 20、ユーザB 10.ユーザA価格= 20、ユーザB = 10を選択する必要がある。 2と3の高い値を得るよりも? – arulraj

0

グループに基づく行番号をUserid、降順であるSNOとすることで、これを実現できます。

クエリ

select t.`SNO`, t.`Userid`, t.`Price` from(
    select `SNO`, `Userid`, `Price`, (
    case Userid when @curA 
    then @curRow := @curRow + 1 
    else @curRow := 1 and @curA := `Userid` end 
) as `rn` 
    from `your_table_name` t, 
    (select @curRow := 0, @curA := '') r 
    order by `Userid`, `SNO` desc 
)t 
where t.`rn` = 1; 
0

サンプルクエリ:

SELECT * FROM table ORDER BY Price LIMIT 2 OFFSET 1 DESC 

私はあなたの問題を理解していれば!

+0

はい、理解しています。あなたのAnsは2と3の高い値を選択するのが正しいです。しかし、ユーザーが最後に入札額を置くのは、選択するだけです。ユーザA = 100、ユーザB = 200、ユーザA = 300、ユーザC = 300、ユーザA 20、ユーザB 10.ユーザA価格= 20、ユーザB = 10を選択する必要がある。ユーザC = 300。 – arulraj

+0

私はあなたをとてもよく理解しているかどうか分からない!値が高い順に3 - 1の最新行が挿入されたリストが必要ですか? – Soheyl

2
select * from price order by price desc limit 2,1 
union 
select * from price order by price asc limit 1 

私の知る限り、第2位、第3位、最小値が必要です。

+0

ありがとうございます。ユーザーが最後に入札額を選択する必要があるのは、選択するだけです。 ExユーザA = 100、ユーザB = 200、ユーザA = 300、ユーザC = 300、ユーザA 20、ユーザB 10.ユーザA価格= 20、ユーザB = 10を選択する必要がある。 2と3の高い値を得るよりも? – arulraj

関連する問題