我有下表(仅示例),其中包含特定项目的 ID 及其在一段时间内的相应生产成本(在这种情况下省略)
| id | cost|
|------|-----|
| 1667 | 20 |
| 2000 | 25 |
| 2000 | 30 |
| 1667 | 35 |
| 3244 | 500 |
| 3244 | 0 |
| 3244 | 25 |
| 3244 | 26 |
| 9999 | 56 |
| 3814 | 526 |
| 9999 | 699 |
| 3814 | 13 |
我正在尝试提取每个特定 ID 的最大值,到目前为止我已经成功了。输出如下所示:
| id | cost |
|------|-------|
| 2000 | 30 |
| 1667 | 35 |
| 3244 | 500 |
| 3814 | 526 |
| 9999 | 699 |
我正在使用的代码是:
SELECT *
FROM t1 WHERE (id,cost) IN
(SELECT id, max(cost)
FROM t1
GROUP BY id
)
但是,我想在获得最大值之前应用额外的过滤器,因为有时成本输入为 0 或数字太高。
- 首先,我想排除所有价格 = 0 的 ID。
- 其次,我想排除所有高于特定 ID 的 2x3rd 四分位数的价格。
例如,如果我们取 ID=3244,则过程如下所示:
| id | cost | | id | cost | | id | cost |
|------|-------| |------|-------| |------|-------|
| 3244 | 500| | 3244 | 500| | | |
| 3244 | 0| | | | | | |
| 3244 | 25| | 3244 | 25| | 3244 | 25|
| 3244 | 26| | 3244 | 26| | 3244 | 26|
对于 ID=3244,我得到的数字是 26,我想对每个 ID 重复这个过程。