Mysql 5.5 データベースにはテーブルがあります。もともと、金額が最も高い最初のレコードが必要でした。
bid
----------------------
id int
personId int
itemId int
amount double
tieBreak boolean
updatedDate datetime
データ:
id personId itemId amount tiebreak updatedDate
----------------------------------------------------------------------------------
1 4 111 100 1 2013-08-26 09:00:00
2 5 111 100 0 2013-08-26 10:00:00
3 6 111 100 1 2013-08-26 11:00:00
...
4 24 222 200 0 2013-08-27 09:00:00
5 57 222 200 0 2013-08-27 10:00:00
6 12 222 200 0 2013-08-27 11:00:00
...
7 2 333 400 1 2013-08-27 11:00:00
8 7 333 300 1 2013-08-27 11:00:00
9 25 333 600 1 2013-08-27 11:00:00
テーブル内の各 itemId の最も古いエントリのレコード全体が必要です。金額はそのアイテムの最大金額に等しく、tieBreak が true (1) のアイテムは、tiebreak が false (0) のアイテムよりも優先されます。
id personId itemId amount tiebreak updatedDate
----------------------------------------------------------------------------------
1 4 111 100 1 2013-08-26 09:00:00
4 24 222 200 0 2013-08-27 09:00:00
9 25 333 600 1 2013-08-27 11:00:00
1 は、タイブレーク = 1 の最も古いレコードであり、最高額であるため 4 最も古いレコードであり、他のすべてが等しいため、最高額であるため 9
私が得た最も近いものは次のとおりです。
SELECT a.*
FROM bid a
LEFT OUTER JOIN bid a2 ON (a.itemId = a2.itemId AND a.amount < a2.amount)
WHERE a2.id IS NULL
ORDER BY tiebreak DESC, updatedDate ASC;
どのような種類の作品が、並べ替えられた最高額に一致するすべての入札を引き戻します... 最高額とタイブレークの最高値 (1 または 0) の各アイテムの最も古い入札のみが必要です。つまり、2 番目のビッドが最初に来たとしても、タイブレーク 1 での 10 の額は、タイブレーク 0 での 10 の額を打ち負かします。