[英]Need to count certain rows based on date criteria in SQL Server
我正在使用SQL Server 2012,並且有一個包含這兩列的表。 僅在以下情況時,我才需要對ORG_ID進行一次計數:每行的EndDate或ORG_ID在所有行的“ 1-1-2018”和“ 1-31-2018”(或之前但之后)的范圍之內/之前該組織。 EndDate為NULL的ORE也不會出現在我的結果中
ORG_ID EndDate
99968042 1/31/2018
99968042 2/14/2018
99968042 2/14/2018
99900699 1/10/2018
99900699 1/10/2018
99900699 1/10/2018
99900699 1/10/2018
99899776 1/20/2018
99843366 12/17/2017
99843366 1/4/2018
99841000 2/1/2016
99651255 NULL
99651255 1/15/2018
應該輸出的行是:
99900699
99899776
99843366
我沒有嘗試過任何東西,因為我無法思考如何處理它。
所以現在我嘗試了這個:
select distinct ORG_ID
from ##PLCMT p1
where not exists (
select *
from ##PLCMT p2
where p1.ORG_ID = p2.ORG_ID and
(p1.EndDate <= '2018-01-01' or p1.enddate >= '2018-01-31' or p1.EndDate is NULL)
)
而且仍然導致返回一個具有NULL結束日期的組織,我不知道為什么。 ORG_ID 3098376在我的結果中,但是如果我查看該ORG_ID的所有行,則如下所示:
select *
from ##PLCMT
where org_id = '3098376'
結果:
ORG_ID結束日期
3098376 2017-09-11
3098376 NULL
3098376 NULL
使用group by
並having
and NOT IN
(以消除那些具有任何NULL值的對象):
SELECT org_id
FROM t
GROUP BY org_id
WHERE org_id NOT IN (SELECT org_id FROM t WHERE enddate IS NULL)
HAVING MAX(enddate) <= '2018-01-31';
使用此邏輯,您可能很安全:
having max(enddate) < '2018-02-01'
即使enddate
具有時間成分,此方法也有效。
另一種方法是使用NOT EXISTS()
SELECT DISTINCT org_id
from t
WHERE NOT EXISTS(
SELECT * FROM t t1
WHERE t1.org_id=t.org_id
AND (t1.enddate > '20180131' OR t1.enddate IS NULL)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.