簡體   English   中英

使用MAX()函數獲得相等值的附加條件

[英]Additional condition for equal values using MAX() function

我有一個簡單的拍賣數據庫。 它包括一個包含出價的表。

+---------+---------+--------+------------+
| item_id | user_id | amount |    time    |
+---------+---------+--------+------------+
|       3 |       2 |    500 | 1540152972 |
|       3 |       4 |    500 | 1540151466 |
+---------+---------+--------+------------+

在拍賣結束時,我需要找到哪些用戶贏得了哪些項目(金額最高)。 我已經考慮過以下查詢

SELECT item_id, user_id, MAX(amount)
FROM auction_bids
GROUP BY item_id

在多個用戶出價相同的出價之前,該方法似乎工作正常。

在那種情況下,我需要檢索最早的(即:最低的time值)。

如何將其用於GROUP BY查詢?

如果沒有其他具有相同item_id的行具有更高的價格,則返回一行;或者,如果價格相同,則另一行稍后。

SELECT item_id, user_id, amount
FROM auction_bids a1
WHERE NOT EXISTS (select 1 from auction_bids a2
                  where a2.item_id = a1.item_id
                    and (a2.amount > a1.amount
                         or (a2.amount = a1.amount and a2.time < a1.time)))

不,這是過濾,不是聚合:

SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
                   FROM auction_bids ab2
                   WHERE ab2.item_id = ab.item_id
                  );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM