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

Getting row with highest value - if multiple rows take another condition

我有一个 table 存储“出价”的地方。我需要获得每组数量最多的行 (PlayerID)。但是,如果由于同一时刻的“出价”而有多行,我需要获得最早的一行(BidDate)。

我的 table 和考试日期如下所示 (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,0);
INSERT INTO bid VALUES(3,1,1500000,'1625513541.2904',505414867524517888);
INSERT INTO bid VALUES(4,1,1500000,'1625513541.33661',840702168863735889);

我已经尝试过不同的查询。但是如果我得到最大(数量),我仍然会留下日期。 您还会看到我用于测试 Min(NULLIF(BidDate)) 的 Null 或 0 的数量,但没有帮助。

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

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

如有任何建议或帮助,我们将不胜感激。

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

使用 ROW_NUMBER() window 函数和适当的 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