я в настоящее время есть запрос, который возвращает, например, следующее: (Вы можете предположить, что это то, что структура таблицы выглядит)Избавиться от «полу-дублей» в запросе
customer_id | start_date | end_date
1 | 20120101 | 20120401
2 | 20120402 | 20121231
1 | 20130101 | 20130401
1 | 20130101 | 20130330
2 | 20130331 | 99991231
2 | 20130402 | 99991231
Там в два момента для рассмотрения:
- Клиент может вернуться, поэтому нормальный макс/мин на этом не работает.
- Это на самом деле обзор нескольких сервисов, и иногда один из них начинается или заканчивается в другую дату. (Очень редко, но мне нужно, чтобы иметь дело с этим сценарием.)
Так принимая во внимание вышесказанное, я хочу запрос, который будет возвращать 1-й, 2-й, 3-й, и 5-й линии.
Моя идея & подход к этому будет:
- Если start_dates равны, отображение макс даты окончания. (group by customer_id & start_date, max (end_date))
- Если end_dates равны, отобразите минимальную дату начала. (Группа по customer_id & датой_окончания, мин (start_date))
я могу написать запрос, который будет делать один из перечисленных выше, но я не знаю, как я смог бы идти об этом оба в то же время. Или, если бы совсем другой подход был бы лучше.
SQL Server 2008
Спасибо!
. , Какой у Вас вопрос? Это как реализовать свои два пулевых пункта? Или это хороший подход? Для последнего вам действительно не хватает информации. –
Вы пытаетесь объединить перекрывающиеся диапазоны дат? (Нумерация строк вашего примера будет приятным жестом, так как вы ссылаетесь на них по номеру в тексте.) – HABO
Теперь мой вопрос выделен полужирным. Мне нужен запрос, который сможет это сделать. Я предложил некоторые мысли и идеи, которые пришли мне на ум, потому что я думал, что это будет полезно. Ответ не обязательно должен следовать им. – Julian