获取具有最高值的行 - 如果多行采用另一个条件
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
中您有 null
或 0
(尽管您已将该列定义为 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。
我有一个 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
中您有 null
或 0
(尽管您已将该列定义为 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。