Регистрация программы создает проблему в нашей системе. Когда клиент переводится из одного штата в другой, система также отключает клиента от своей программы и повторно зачисляет клиента в программу в тот же день.TSQL SELECT Предварительная регистрация Если
ЦЕЛЬ: В моем запросе должна быть указана первая дата регистрации «p_effdt» (до любого повторного зачисления). Но я не хочу MIN (p_effdt), потому что это может не отражать каких-либо фактических ошибок регистрации.
ПРИМЕР: Клиент Адам регистрируется 1.02.2013. 4/1/2013 он переключается на другой штат, чтобы наша система не регистрировала и переписывала Адама 4/1/2013. Дата, которую я хочу сообщить для Адама, - 2/1/2013. Клиент Eve регистрируется 2/1/2013, а затем истекает 5/1/2013 и повторно регистрируется 7/1/2013. Дата, которую я хочу сообщить для Евы, - 7/1/2013.
SELECT client.c_id, c_ln + ', ' + c_fn AS 'Client', program.p_id, MIN(p_effdt) --that is wrong!
FROM client INNER JOIN program ON client.c_id = program.c_id
WHERE program.p_effdt BETWEEN '01.01.2013' AND '12.31.2013'
AND program.p_id = '1234'
GROUP BY client.c_id, c_ln, c_fn, program.p_id, p_effdt
ORDER BY client.c_id
Логика будет что-то вроде: если p_lpsdt = p_effdt затем перейти к предварительному p_effdt и спросить, если p_lpsdt = p_effdt снова ... Нужно ли что в SELECT, или использовать ROWCOUNT() или ...?
Благодарим за помощь.
Я просто попробовал следующее, и это может сработать, я проверю его сейчас. Но все еще хочется услышать ваши мысли. Благодарю. , (SELECT MAX (p_effdt) WHERE p_effdt <> p_lapdt) – PowderSnorkel
Теперь я пытаюсь: WHERE \t ((program.p_effdt BETWEEN '01 .01.2013 'AND '12 .31.2013') AND ((p_effdt <> p_lapdt) ИЛИ p_lapdt IS NULL)) – PowderSnorkel
Я не уверен в терминологии. Может ли клиент регистрироваться, повторно регистрироваться (переключаться), а затем истекать? Если это так, я думаю, что вы получите их повторную регистрацию, а не их первоначальную регистрацию. – Zec