我有一个表客户端,有三列IdPatient,keyPatient,nbvisites和一个表logclient有三列IdPatient,keyPatient,date
我需要按[IdPPatient]、[keyPatient]进行分组,并对logclient 表上的日志进行计数
SELECT [IdPatient],[keyPatient], count(*)
FROM [dbo].[logclient ]
group by [IdPatient], [keyPatient]
以及在我需要提取表客户端上的记录之后,这些记录的nbvisits与我以前的计数(*(不同(我也可以在表客户端上没有客户端记录(。
我该如何通过一个查询来做到这一点?
表客户端
| IdPatient| keyPatient |nbvisits
|----------|--- |
| 18569 | 3 |1
| 18571 | 2 |1
| 20000 | 0 |2
表日志客户端
| IdPatient | keyPatient |date
|---------- |--- |
| 18569 | 3 |1990
| 18571 | 2 |1990
| 18571 | 2 |1990
| 20000 | 0 |1990
| 20000 | 0 |1990
| 200001 | 2 |1990
在我按IdPatient和KeyPatient分组并计数之后
SELECT [IdPatient],[keyPatient], count(*)
FROM [dbo].[logclient]
group by [IdPatient], [keyPatient]
我有
| IdPatient | keyPatient |count
|---------- |--- |
| 18569 | 3 |1
| 18571 | 2 |2
| 20000 | 0 |2
| 200001 | 2 |1
现在我需要检查第一个表CLIENT是否计数<gt;nbvisites,并有我的计数不同于nbvisites-的行
最终结果:
| IdPatient | keyPatient |count
|---------- |--- |
| 18571 | 2 |2
| 200001 | 2 |1
将查询打包为派生表(子查询(。使用EXISTS
查看是否存在具有相同IdPatient值但其他计数的客户端行。
select dt.*
from
(
SELECT [IdPatient], [keyPatient], count(*) cnt
FROM [dbo].[logclient ]
group by [IdPatient], [keyPatient]
) dt
where exists (select * from client c
where dt.[IdPatient] = c.[IdPatient]
and dt.cnt <> c.[nbvisits])
返回没有相同计数的客户端行的行:
select dt.*
from
(
SELECT [IdPatient], [keyPatient], count(*) cnt
FROM [dbo].[logclient ]
group by [IdPatient], [keyPatient]
) dt
where not exists (select * from client c
where dt.[IdPatient] = c.[IdPatient]
and dt.cnt = c.[nbvisits])