查找SQL中达到阈值的日期

查找SQL中达到阈值的日期,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我想用SQL编写一个查询,找出X个人数的登记日期。记录跟踪人员的姓名、签入日期和签出日期如果未签出则为空 对于以下数据集,我如何知道我已达到2/8的3名患者限制 Name, Date In, Date Out John, 1/25/2014, NULL Tom, 2/8/2014, 2/9/2014 Joe, 1/21/2014, 1/22/2014 Dave, 2/7/2014,

我想用SQL编写一个查询,找出X个人数的登记日期。记录跟踪人员的姓名、签入日期和签出日期如果未签出则为空

对于以下数据集,我如何知道我已达到2/8的3名患者限制

    Name,      Date In,     Date Out
    John,     1/25/2014,     NULL
    Tom,      2/8/2014,    2/9/2014
    Joe,      1/21/2014,   1/22/2014
    Dave,     2/7/2014,      NULL
到目前为止,我有这个查询,但我不知道当用户签出时如何减少计数

select count(c1.Name) as count, c2.DateIn
from customer c1 join customer c2 
on c1.DateIn <= c2.DateIn 
group by c2.DateIn
having count(c1.Name) >= 3

谢谢

如果我正确理解了问题:

select date_in
from customer
where date_out is null
group by date_in
having count(*) >= 3
这个怎么样:

select t1.*, 
     (select count(t2.name) from customer t2 
         where t2.date_in <= t1.date_in and (t2.date_out is null or t2.date_out >= t1.date_in))
     from customer t1
     order by t1.date_in

新列显示客户表中每行登录的用户数。

您可以共享所需输出吗?所需输出应该是3个用户同时签入的日期。就本案而言,时间为2014年2月8日。使用存储过程会更容易解决这个问题吗?不,它不会返回正确的日期,事实上,它不会返回任何内容。此查询仅选择尚未离开的用户。这不是计算中间2个用户签入的日期。这是我的理解:您希望签入日期选择3个或更多用户已签入的日期尚未签出。如上所述,如果您给出所需的输出,那么它将有助于回答。也许我不清楚。这里是:我想知道有3个或更多的用户第一次登记的日期是什么时候。用户是否在第二天离开并不重要。对于上述示例,日期应为2014年2月8日。希望这能让你明白,你说得对。我还在努力理解你是怎么做到的。t1和t2的比较以及t1和t2到底是什么让我困惑。谢谢t1和t2只是customer表的别名。。。t1代表外部选择的客户,t2代表内部选择的客户。我想最让人困惑的是,你怎么知道应该使用t1还是t2。例如t2.date\u out为空为什么t1.date\u out不为空?t2.date\u out>=t1.date\u out而不是t1.date\u out>=t2.date\u out。感谢您的帮助。完美的设计!:看来你发现了一个错误。。。我根本不打算使用t1.date_out,所以不需要在那里检查null。。。当t1登录时,子查询只是尝试查找t2登录的所有客户