假设有这个表样例,并且有相同的ID和ValuesA组,我想要得到特定于记录的ValueB。让我展示一下:
使用数据库: Postgres
这是我的示例表,假设拆分(没有在代码中真正拆分我的表)为3组,我想得到以下情况:
+-----+--------+---------+
| ID | ValueA | ValueB |
+-----+--------+---------+
| 123 | 1 | PIP |
| 123 | 1 | POP |
| 123 | 1 | PIP |
| 456 | 2 | COP-1 |
| 456 | 2 | COP-2 |
| 456 | 2 | COP-2 |
| 789 | 5 | DIP |
| 789 | 5 | DOP |
| 789 | 5 | DIP |
| 789 | 5 | DIP |
+-----+--------+---------+ 案例1:
+-----+--------+--------+
| ID | ValueA | ValueB |
+-----+--------+--------+
| 123 | 1 | PIP |
| 123 | 1 | POP |
| 123 | 1 | PIP |
+-----+--------+--------+从这个表中,我只想得到这个值:
123 | 1 | POP
案例2
+-----+--------+----------+
| ID | ValueA | ValueB |
+-----+--------+----------+
| 456 | 2 | COP-1 |
| 456 | 2 | COP-2 |
| 456 | 2 | COP-2 |
+-----+--------+----------+从这个表中,我只想得到这个值:
456 | 2 | COP-1
案例3
+-----+--------+---------+
| ID | ValueA | ValueB |
+-----+--------+---------+
| 789 | 5 | DIP |
| 789 | 5 | DOP |
| 789 | 5 | DIP |
| 789 | 5 | DIP |
+-----+--------+---------+我想从这个表中得到几次出现的记录,但不能是第一个或最后一个记录。
789 | 5 | DIP
我想得到3个查询,每个查询的结果。
请帮帮我。
我尝试了几种方式,但我仍然没有建立e方法或正确的陈述。
这里有一种方法可以用PostgreSQL代码来实现,还是像Python这样的脚本代码?
发布于 2022-02-23 08:50:18
第一种方法:
WITH added_row_number AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY ValueA ORDER BY Id DESC) AS row_number
FROM table
)
SELECT *
FROM added_row_number
WHERE row_number = 1 and ValueB ilike 'POP'第二种方法:
with added_row_number as (
select *,
row_number() over(partition by "Id" order by "Id") as row_number
from table
)
select * from added_row_number
where "Id" in (
select "Id"
from added_row_number
group by "ValueA"
)https://stackoverflow.com/questions/71223359
复制相似问题