Мне нужно найти членство между двумя датами (7-01-14 и 6-30-15), которые были членами не менее 4 месяцев или более в течение этого периода времени. Существует START_DATE и столбец END_DATE. Любой совет будет принят во внимание. Спасибо.Поиск членов между диапазоном дат
ответ
Вы можете использовать этот код:
select *
from YourTable
where DateColumn between '2014/01/7' and '2006/05/30' and
start_date >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -4, current_timestamp)), 0)
Назовём вашу таблицу регистрации.
Во-первых .. мы хотим, чтобы все люди, которые были зачислены между 7-01-14
и 6-30-15
Select *
From Enrollment
Where Start_Date Between '7-01-14' and '6-30-15'
And End_Date Between '7-01-14' and '6-30-15'
Кроме того, членство должно быть, по крайней мере найдено месяцев долго в этом отрезок времени.
Select *
From Enrollment
Where Start_Date Between '7-01-14' and '6-30-15'
And End_Date Between '7-01-14' and '6-30-15'
And DateDiff (month, Start_Date, End_Date) > 4
Но рассмотреть эти сценарии:
- Что произойдет, если кто-то подпишется на «6-25-15» (за 5 дней до конца отсечки) и действует в течение 4-х месяцев?
- Что произойдет, если кто-то зарегистрируется на «4-01-14» (за 3 месяца до начала отсечки) и активен в течение 4 месяцев?
При необходимости вам необходимо внести соответствующие изменения в запрос, чтобы позаботиться об этих сценариях, если они вам понадобятся.
Например, если Дата_начал ИЛИ датой_окончание может быть между датами отрезной указан, но членство еще должно быть 4 месяца длиной
Select *
From Enrollment
Where
(
Start_Date Between '7-01-14' and '6-30-15'
OR End_Date Between '7-01-14' and '6-30-15'
)
And DateDiff (month, Start_Date, End_Date) >= 4
Но что, если Дата_начали меньше, чем начало cutff, и датой_окончание больше, чем в конце отсечки, а членство еще должно быть 4 месяца длиной
Select *
From Enrollment
Where
(
(Start_Date Between '7-01-14' and '6-30-15' OR End_Date Between '7-01-14' and '6-30-15')
OR
(Start_Date < '7-01-14' and End_Date > '6-30-15')
)
And DateDiff (month, Start_Date, End_Date) >= 4
К сожалению, это не сработает по двум причинам, датированный в течение месяца может составлять 3 месяца и 1 день и по-прежнему будет включен. Другая причина заключается в том, что у вас пропали люди с start_date и end_date за пределами интервала –
Это действительно работает в обоих случаях .. проверить последний запрос –
да, они оба дают неверный результат –
Это будет работать для SQLServer 2012. Если вы используете более раннюю версию, вы можете заменить где пункт:
DECLARE @t table(START_DATE date, END_DATE date)
INSERT @t values
('2015-01-01','2015-08-30'),('2015-01-01','2015-12-30'),
('2015-08-01','2015-12-30'),('2015-11-01','2017-12-30'),
('2016-01-01','2017-12-30'),('2017-01-01','2017-12-30')
DECLARE @from date='2015-7-01'
DECLARE @to date='2016-03-01'
SELECT *
FROM @t
WHERE
DATEADD(month,4, IIF(@from<START_DATE, START_DATE, @FROM)) <=
IIF(@to>END_DATE, END_DATE, @to)
/*
--this is for sqlserver 2008
DATEADD(month,4, CASE WHEN @from<START_DATE THEN START_DATE ELSE @FROM END) <=
CASE WHEN @to>END_DATE THEN END_DATE ELSE @to END
*/
Спасибо за подсказки! – gofr1
- 1. Sql поиск дата между диапазоном дат
- 2. Отправка дат между диапазоном дат - mySQL
- 3. Выберите данные между диапазоном дат
- 4. Список всех дат между диапазоном
- 5. Если дата между диапазоном дат
- 6. Попадая Сроки между диапазоном дат
- 7. метки времени между диапазоном дат
- 8. Получить записи между диапазоном дат
- 9. Поиск количества праздников между заданным диапазоном дат в sql
- 10. SQL-поиск между диапазоном с диапазоном
- 11. Выбор между диапазоном дат, игнорирующим год
- 12. Данные поиска между диапазоном дат И добавление данных между предопределенным диапазоном дат
- 13. Поиск отсутствующих дат по сравнению с диапазоном дат
- 14. Выбор между диапазоном дат и определенным временным диапазоном
- 15. Сотрудник доступен для задачи между диапазоном дат
- 16. Получение записей между диапазоном дат частности
- 17. Как выбрать все даты между диапазоном дат?
- 18. Расчет уровня занятости между диапазоном дат
- 19. Как найти данные между определенным диапазоном дат
- 20. Найти максимальное значение между указанным диапазоном дат
- 21. MySQL разбивка даты между диапазоном дат
- 22. Дата существует Между диапазоном дат не работает
- 23. MongoDB между диапазоном дат запроса - вложенным свойством
- 24. Числа активных записей между диапазоном дат
- 25. Если Get-Date находится между диапазоном дат
- 26. Выделить все даты между диапазоном дат -TERADATA
- 27. Rails получают равные сегменты между диапазоном дат
- 28. запрос между диапазоном дат, не показывающих результаты
- 29. MySQL найти любые записи между диапазоном дат
- 30. Сумма нескольких ячеек между диапазоном дат
Вы можете показать нам все свои столбцы? –
Пожалуйста, покажите, что вы пробовали, и некоторые образцы данных и результатов будут очень полезны! – gofr1
Вот совет - прочитайте [ask]. Измените свой вопрос, чтобы включить соответствующие таблицы ddl и некоторые примеры данных в формате ddl. Также укажите желаемые результаты. –