2014-11-18 2 views
0

Я хотел бы написать запрос в SQL, который узнает, что такое дата, когда число Х проверено. Записи отслеживают имя человека, Дата, указанная в , и дата выбрана (Null, если не выписана).Чтобы найти дату достижения порогового значения в SQL

Для следующего набора данных, как я узнаю, что я достиг 3-го предела пациента на 2/8?

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 

спасибо!

+0

Вы можете поделиться желаемым выходом? –

+0

Желаемый результат должен быть только той датой, когда три пользователя зарегистрировались одновременно. Для этого случая это было бы 2/8/2014. Использовать хранимую процедуру проще решить эту проблему? – Ken

ответ

2

как об этом:

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 

новый столбец показывает, сколько пользователей вошли в систему для каждой строки в вашей таблице клиентов.

+0

У вас все в порядке. Я все еще пытаюсь понять, как вы это сделали. Сравнение t1 vs t2 и то, что именно t1 и t2 меня смущает. Благодаря! – Ken

+0

t1 и t2 - это просто псевдонимы для таблицы клиентов ... t1 для клиента во «внешнем» выборе и t2 для «внутреннего» выбора в таблице клиентов – PrfctByDsgn

+0

Я предполагаю, что запутанная часть, откуда вы знаете, если вы должны использовать t1 или t2. Например, «t2.date_out равно null» - почему бы не «t1.date_out null»? "t2.date_out> = t1.date_out" вместо "t1.date_out> = t2.date_out". Ценю вашу помощь. – Ken

0

Если я правильно понял вопрос правильно:

select date_in 
from customer 
where date_out is null 
group by date_in 
having count(*) >= 3 
+0

Нет, он не возвращает правильную дату, по сути, ничего не возвращает. В этом запросе выбираются только те пользователи, которые еще не ушли. Это не учет даты, когда были отмечены пользователи среднего уровня. – Ken

+0

Это мое понимание: вам нужна дата проверки ('select date_in'), на которую было зарегистрировано 3 или более пользователей (еще не проверено). Как было предложено выше, если вы дадите желаемый результат, это поможет ответить. – NP3

+0

Возможно, я был неясен. Вот он: Я хотел бы, чтобы в первый день было зарегистрировано 3 или более пользователей. Не имеет значения, покинет ли этот пользователь на следующий день. В приведенном выше примере это должно быть 2/8/2014. Надеюсь, это поможет вам. – Ken

Смежные вопросы