2016-07-11 3 views
-1

я следующая таблица,Как я могу совмещать записи на основе некоторых условий

id id_concept start_date end_date 
---------------------------------------------- 
100 282  20/06/2016 24/06/2016 
100 282  15/07/2016 18/07/2016 
300 282  01/09/2016 02/09/2016 

Мне нужно объединить записи, которая имеет тот же идентификатор, id_concept и время между END_DATE одной записи и START_DATE из следующие 30 дней или меньше (< = 30)

также для комбинированных записей, мне нужно взять START_DATE как самый первый датой_начала отчета и конец _DATE как датой_окончания последней записи

o/p должно быть как,

 id id_concept start_date end_date  count 
    --------------------------------------------------- 
    100 282  20/06/2016 18/07/2016  2 
    300 282  01/09/2016 02/09/2016  1 
+0

Пожалуйста, добавьте только теги, которые относятся к используемой СУБД. Вы действительно используете Oracle ** и ** Postgres ** и ** Redshift? –

ответ

1

SQL Fiddle

PostgreSQL 9.3 Настройка схемы:

CREATE TABLE table_name (id, id_concept, start_date, end_date) AS 
SELECT 100, 282, DATE '2016-06-20', DATE '2016-06-24' UNION ALL 
SELECT 100, 282, DATE '2016-07-15', DATE '2016-07-18' UNION ALL 
SELECT 300, 282, DATE '2016-09-01', DATE '2016-09-02'; 

Запрос 1:

SELECT id, 
     id_concept, 
     MIN(start_date) AS start_date, 
     MAX(end_date) AS end_date, 
     COUNT(*) AS "count" 
FROM (
    SELECT id, 
     id_concept, 
     start_date, 
     end_date, 
     SUM(diff) OVER (
      PARTITION BY id, id_concept 
      ORDER BY start_date, end_date 
     ) AS grp 
    FROM (
    SELECT t.*, 
      CASE 
      WHEN LAG(end_date) OVER (
        PARTITION BY id, id_concept 
        ORDER BY start_date, end_date 
       ) >= start_date - INTERVAL '30' DAY 
      THEN 0 
      ELSE 1 
      END AS diff 
    FROM table_name t 
) t 
) t 
GROUP BY id, id_concept, grp 

Results:

| id | id_concept |     start_date |     end_date | count | 
|-----|------------|-----------------------------|-----------------------------|-------| 
| 300 |  282 | September, 01 2016 00:00:00 | September, 02 2016 00:00:00 |  1 | 
| 100 |  282 |  June, 20 2016 00:00:00 |  July, 18 2016 00:00:00 |  2 | 
+0

@MTO .... Получение ошибки «Совокупные функции окна с предложением ORDER BY требуют предложения фрейма». Не могли бы вы проверить его? – Chinnu

+0

@Chinnu SQL Fiddle выше работает и не генерирует эту ошибку. Можете ли вы опубликовать новый вопрос с примером того, что вы делаете, что порождает ошибку, поскольку я не могу ее реплицировать. – MT0

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