我有此数据(请参见所附屏幕截图)。我想考虑所有的约会系列 意甲中的约会具有完全相同的visit_motive_id。我的意思是,对于约会约会ID = 337438750,我只想保留一个visit_motive_id,但要记住,有时对于不同的约会约会ID,您可以具有相同的visit_motive_id。
这是我的数据的样子
+--------------------+-----------------+
| appointment_set_id | visit_motive_id |
+--------------------+-----------------+
| 336926466 | 388468 |
| 336926466 | 388468 |
| 337145347 | 69664 |
| 337438750 | 484259 |
| 337438750 | 484259 |
| 337438750 | 484261 |
| 337438750 | 484262 |
| 337652969 | 1725 |
| 337652969 | 1725 |
| 337652969 | 1726 |
| 337652969 | 1727 |
| 337652969 | 1725 |
| 337652969 | 1725 |
+--------------------+-----------------+
这就是我需要的,一个单一的visit_motive_id可以作为一个约会集ID。
+--------------------+-----------------+
| appointment_set_id | visit_motive_id |
+--------------------+-----------------+
| 336926466 | 388468 |
| 336926466 | 388468 |
| 337145347 | 69664 |
| 337438750 | 484259 |
| 337438750 | 484259 |
| 337652969 | 1725 |
| 337652969 | 1725 |
| 337652969 | 1725 |
| 337652969 | 1725 |
+--------------------+-----------------+
感谢您的帮助
答案 0 :(得分:0)
您可以使用HAVING
过滤掉多次访问的约会。例如:
select *
from t
where appointment_set_id is null
or appointment_set_id in (
select appointment_set_id
from t
group by appointment_set_id
having min(visit_motive_id) <> max(visit_motive_id)
)
答案 1 :(得分:0)
您可以进行聚合:
select appointment_set_id, visit_motive_id
from table t
group by appointment_set_id, visit_motive_id
having count(*) = 1;
答案 2 :(得分:0)
select appointment_set_id, visit_motive_id
from (select appointment_set_id, visit_motive_id, count(*) as cnt,
row_number() over (partition by appointment_set_id order by count(*) desc) as seqnum
from t
group by appointment_set_id, visit_motive_id
) t
where seqnum = 1;
这不会返回原始行。但这实际上似乎没有用。当然,您可以使用join
或类似的机制来获取原始行。