在 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 因为它是最旧的记录,其中 tiebreak = 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)的单个最旧出价。意思是 10 的数量与 tiebreak 1 击败了 10 的数量与 tiebreak 0 即使第二个出价首先出现。