2016-02-03 2 views
0

У меня есть строковый столбец с именем 'days', который имеет произвольную длину. В датах могут быть пробелы. Вот пример:SQL: подсчет совпадений в строке дат

2016-01-21,2016-01-22,2016-01-26,2016-01-27,2016-01-28,2016-01-30

Я еще один столбец называется 'start_date'. Я хочу рассчитать количество совпадений в «дни» для диапазона дат, начиная с 'start_date' и заканчивая днями позже.

Например, если 'start_date' является 2016-01-27, а диапазон составляет 10 дней, выход должен быть 3. Обратите внимание, что каждая строка может иметь другое значение для 'start_date'.

+0

финики всегда ранее заказывали? –

+0

Какова ваша СУБД? –

+0

даты всегда заказываются. Я использую Impala – lever

ответ

0

добавить 10 дней Дата_начали используя adddate и вычитают текущую дату, используя DATE_SUB, затем сделать группу по получить count.check этой ссылки на функции даты http://www.cloudera.com/documentation/archive/impala/2-x/2-0-x/topics/impala_datetime_functions.html

+0

Проблема заключается в том, что «дни» - это строка дат, разделенная запятыми, поэтому я не вижу, как я могу напрямую применять функцию даты. Я пытался использовать строковые функции, такие как: WHERE days LIKE «% 2016-01-27%», но я могу заставить его работать только на одну дату, а не на ряд дат. – lever

+0

Я думаю, вам нужно создать некоторую таблицу temp и сохранить расщепленные даты. выберите str_date в v_str_date из ... попытайтесь сломать строку на основе запятой и возьмите эту подстроку следующим образом: (instr (v_str_date, ',')> 0) loop begin v_date: = substr (v_str_date, instr (v_str_date, ') , ')) и вставить его в таблицу temp. конец. Теперь запросите таблицу, указав диапазон. – sreenivas

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