有一個表: tb
表結構:
病人ID,日期,藥品編碼 (其他欄位可以忽略)
我要查找,那些病人曾經某一天,同時開過藥品編碼為 A,B,C 三種藥。
要的結果是:
病人ID 日期
10002 2020-10-29
10002 2020-10-30
10002 2020-11-04
10003 2020-11-01
10003 2020-11-02
10004 2020-11-03
uj5u.com熱心網友回復:
select 病人ID,日期from table
where 藥品編碼 in (A,B,C)
group by 病人ID,日期
having count(藥品編碼)=3
uj5u.com熱心網友回復:
謝謝,但是你這個會存在一個問題,如果A 藥品 開了三次,沒開 B,C 也會這個條件。
uj5u.com熱心網友回復:
你說的對,再套一層。select 病人ID,日期
from(
select 病人ID,日期, 藥品編碼
from table
where 藥品編碼 in(A, B, C)
group by 病人ID,日期 ,藥品編碼
)
group by 病人ID,日期
having count(1) =3
uj5u.com熱心網友回復:
日期如果是時間戳,自己再處理下就行。uj5u.com熱心網友回復:
SELECT Y_NAME,YI_DATEFROM TB
WHERE YI_CODE IN ('A','B','C')
GROUP BY Y_NAME,YI_DATE
HAVING COUNT(DISTINCT YI_CODE)=3
uj5u.com熱心網友回復:
你可以參考下with t as (
select 10002 id,'2020-01-01' c_date,'A' c_type from dual union all
select 10002 ,'2020-01-01' ,'B' from dual union all
select 10002 ,'2020-01-02' ,'A' from dual union all
select 10002 ,'2020-01-02' ,'B' from dual union all
select 10002 ,'2020-01-02' ,'C' from dual union all
select 10003 ,'2020-01-01' ,'A' from dual union all
select 10003 ,'2020-01-01' ,'B' from dual union all
select 10003 ,'2020-01-01' ,'B' from dual union all
select 10004 ,'2020-01-01' ,'A' from dual union all
select 10004 ,'2020-01-01' ,'C' from dual)
select id,c_date
from (
select ID,c_date,listagg (distinct c_type, ',') WITHIN GROUP (ORDER BY c_type) a
from t
where c_type in ('A','B','C')
group by ID,c_date)
where a='A,B,C'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/238174.html
標籤:基礎和管理
上一篇:請教個資料庫問題
