Having in SQL 服务器的条件过滤器

Conditional filter with Having in SQL Server

我正在使用 SQL Server 2016。我正在尝试弄清楚如何使用 having 子句进行条件过滤。

我想给我一个所有 ID、日期和用户名的列表,如果日期在 2018 年之前,则向我显示具有 2-12 个 ID 的用户,如果日期在 2018 年之后,则向我显示具有 2 个 ID 的用户-24 个 ID。我只能考虑合并代码,但这会增加处理时间,有没有其他方法可以更快地完成此操作?

原码:

select [id], [date], [user name]
from [table]
where [date] < '2018-01-01' 
group by [id], [date], [user name]
having count([id]) between 2 and 12) b

联合理念:

select [id], [date], [user name]
from [table]
where [date] < '2018-01-01' 
group by [id], [date], [user name]
having count([id]) between 2 and 12) b

UNION 

select [id], [date], [user name]
from [table]
where [date] >= '2018-01-01' 
group by [id], [date], [user name]
having count([id]) between 2 and 24) b

您可以在 HAVING 语句中使用 OR:

select [id], [date], [user name]
from [table]
group by [id], [date], [user name]
having (
        (count([id]) between 2 and 12 AND [date] < '2018-01-01')
        OR
        (count([id]) between 2 and 24 AND [date] >= '2018-01-01')
       );

仅当您在 HAVING 子句中引用的列是聚合列或包含在 GROUP BY 子句中时才有效