У меня есть большой набор данных, где я хочу суммировать счет, где записи имеют перекрывающееся время. Например, с учетом данных
[
{"id": 1, "name": 'A', "start": '2018-12-10 00:00:00', "end": '2018-12-20 00:00:00', count: 34},
{"id": 2, "name": 'B', "start": '2018-12-16 00:00:00', "end": '2018-12-27 00:00:00', count: 19},
{"id": 3, "name": 'C', "start": '2018-12-16 00:00:00', "end": '2018-12-20 00:00:00', count: 56},
{"id": 4, "name": 'D', "start": '2018-12-25 00:00:00', "end": '2018-12-30 00:00:00', count: 43}
]
![enter image description here](https://i.stack.imgur.com/Mc5Cq.png)
Вы можете видеть, что есть 2 периода, когда действия перекрываются. Я хочу вернуть общее количество этих «перекрытий» на основе действий, связанных с перекрытием. Таким образом, вышеприведенное будет выводить что-то вроде:
[
{start:'2018-12-16', end: '2018-12-20', overlap_ids:[1,2,3], total_count: 109},
{start:'2018-12-25', end: '2018-12-27', overlap_ids:[2,4], total_count: 62},
]
Вопрос в том, как создать это с помощью запроса postgres? Изучал generate_series, а затем выяснял, какие действия попадают в каждый интервал, но это не совсем верно, поскольку данные непрерывны - мне действительно нужно определить точное время перекрытия, а затем подвести итог по перекрывающимся действиям.
РЕДАКТИРОВАТЬ Добавили еще один пример. Как указал @SRack, поскольку A, B, C перекрываются, это означает, что B, C A, B и A, C также перекрываются. Это не имеет значения, так как искомый вывод представляет собой массив диапазонов дат , которые содержат перекрывающиеся действия , а не все уникальные комбинации перекрытий. Также обратите внимание, что даты являются временными метками, поэтому они будут иметь точность в миллисекунды и не обязательно будут все в 00:00:00.
Если это поможет, вероятно, будет общее условие ГДЕ в общем количестве. Например, хотите видеть только результаты, где общее количество> 100
![enter image description here](https://i.stack.imgur.com/lwgwR.png)