场景1:
我有两个表INFUSION_APP_APPOINTMENT,INFUSION_APP_NURSE_NOTES,其中 INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID = INFUSION_APP_APPOINTMENT.ID,我想找出INFUSION_APP_NURSE_NOTES.ID与INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID相同的地方。
例如如果INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID = 1并且INFUSION_APP_NURSE_NOTES.ID为12,15,78,那么我想显示所有 INFUSION_APP_NURSE_NOTES.ID的位置,其中INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID = 1。 我使用以下脚本
SELECT INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID,INFUSION_APP_NURSE_NOTES.ID
FROM INFUSION_APP_NURSE_NOTES
GROUP BY INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID,INFUSION_APP_NURSE_NOTES.ID
HAVING COUNT(INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID)>1
但是它没有给我任何记录。
场景2:
我正在脚本下面运行,目的是获得具有不同INFUSION_APP_NURSE_NOTES.ID但具有相同INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID的重复记录。
SELECT INFUSION_APP_NURSE_NOTES.ID,INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID,INFUSION_APP_NURSE_NOTES.TYPE
FROM INFUSION_APP_NURSE_NOTES
WHERE
EXISTS (
SELECT 1 FROM INFUSION_APP_APPOINTMENT
WHERE
INFUSION_APP_NURSE_NOTES.ENABLE=1
AND INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID=INFUSION_APP_APPOINTMENT.ID
GROUP BY INFUSION_APP_NURSE_NOTES.ID
HAVING COUNT(INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID)>1
)
ORDER BY INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID;
但出现错误
SQL错误(164):每个GROUP BY表达式必须至少包含一个 不是外部参考的列
如何解决?
我只希望有一个具有共同APPOINTMENT_ID但n互不相同的行
答案 0 :(得分:0)
尝试一下
SELECT INFUSION_APP_NURSE_NOTES.ID,INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID,INFUSION_APP_NURSE_NOTES.TYPE
FROM INFUSION_APP_NURSE_NOTES
WHERE
EXISTS (
SELECT COUNT(B.APPOINTMENT_ID), B.ID
FROM INFUSION_APP_APPOINTMENT A
INNER JOIN INFUSION_APP_NURSE_NOTES B ON B.APPOINTMENT_ID = A.ID
WHERE
B.ENABLE=1
GROUP BY B.ID
HAVING COUNT(B.APPOINTMENT_ID)>1
)
ORDER BY INFUSION_APP_NURSE_NOTES.APPOINTMENT_ID;
答案 1 :(得分:0)
问题尚不清楚。查找重复项通常使用ROW_NUMBER()之类的排名函数执行。此查询:
SELECT *,ROW_NUMBER(PARTITION BY APPOINTMENT_ID ORDER BYID) as RN
FROM INFUSION_APP_NURSE_NOTES
WHERE
ENABLE=1
将按照ID对同一约会的笔记进行排名,并从最早的笔记开始返回1,2,3等。 ORDER BY ID DESC
将为 latest 注释返回1。
可以在子查询或CTE中使用它来查找第一个,最后一个或重复的记录,例如:
with notes as (
SELECT *,ROW_NUMBER(PARTITION BY APPOINTMENT_ID ORDER BYID) as RN
FROM INFUSION_APP_NURSE_NOTES
WHERE
ENABLE=1
)
select *
from notes
where RN=1
在每次约会时将返回第一笔便笺:
where RN>1
将仅返回重复项。
问题并没有说明应该如何处理重复项。
如果问题是如何从具有多个注释的约会中返回 all 个注释,则可以使用子查询来返回包含多个注释的APPOINTMENT_ID
s。无需包含INFUSION_APP_APPOINTMENT
表:
SELECT *
FROM INFUSION_APP_NURSE_NOTES
where
ENABLE=1 AND
APPOINTMENT_ID IN ( SELECT APPOINTMENT_ID
FROM INFUSION_APP_NURSE_NOTES
WHERE
ENABLE=1
group by APPOINTMENT_ID
having count(*)>1)