获取具有最高值的行 - 如果多行采用另一个条件

我有一张表,用于存储“出价”。我需要获得每组金额最高的行(PlayerID)。但是,如果由于“出价”同时出现多行,我需要获得最早的行(BidDate)。

我的表和测试日期如下所示 (DB-Fiddle):

CREATE TABLE bid(
    BidID integer PRIMARY KEY,PlayerID integer,Amount integer,BidDate text,User integer
);
INSERT INTO bid VALUES(1,1,1500000,NULL,0);
INSERT INTO bid VALUES(2,2,5875000,0);
INSERT INTO bid VALUES(3,'1625513541.2904',505414867524517888);
INSERT INTO bid VALUES(4,'1625513541.33661',840702168863735889);

我已经尝试了不同的查询。但是如果我得到了 max(amount) 我仍然剩下日期。 您还会看到我用于测试 Min(NULLIF(BidDate)) 的 Amounts of Null 或 0,但没有帮助。

我期望(想要实现)的结果是这种情况:

 BidID | PlayerID |  Amount  |    BidDate      |        User        |
 ------|----------|----------|-----------------|--------------------|
    3  |     1    |  1500000 | 1625513541.2904 | 505414867524517888 |
    2  |     2    |  5875000 |     0 or Empty  |         0          |

感谢任何建议或帮助。

iCMS 回答:获取具有最高值的行 - 如果多行采用另一个条件

您要求的棘手部分是在 BidDate 列中您有 null0(尽管您已将该列定义为 text)。

ROW_NUMBER() 窗口函数与适当的 ORDER BY 子句结合使用,以考虑这些不规则性:

SELECT BidID,PlayerID,Amount,BidDate,User
FROM (
  SELECT *,ROW_NUMBER() OVER (
              PARTITION BY PlayerID 
              ORDER BY Amount DESC,COALESCE(BidDate,0) = 0,BidDate
            ) rn
  FROM bid
)  
WHERE rn = 1

参见demo

本文链接:https://www.f2er.com/139344.html

大家都在问