У меня есть таблица, в которой у меня есть время, связанное с идентификатором:
┌────────────────┬──────────────────────┐
│ location_id | datetime |
├────────────────┼──────────────────────┤
│ 200333 | 2008-01-01 00:00:00 |
│ 200333 | 2008-01-01 01:00:00 |
│ 200333 | 2008-01-01 02:00:00 |
| ... | ... |
│ 200333 | 2009-10-23 21:00:00 |
│ 200333 | 2009-10-23 22:00:00 |
│ 200333 | 2009-10-23 23:00:00 |
│ 200768 | 2008-06-01 00:00:00 |
│ 200768 | 2008-06-01 01:00:00 |
│ 200768 | 2008-06-01 02:00:00 |
| ... | ... |
│ 200768 | 2009-12-31 00:00:00 |
│ 200768 | 2009-12-31 00:00:00 |
│ 200768 | 2009-12-31 00:00:00 |
└────────────────┴──────────────────────┘
Каким образом можно выбрать самый длинный период времени, в котором эти две перекрывающиеся доли location_id
? В этом случае желаемый результат будет:
┌──────────────────────┬──────────────────────┐
│ start | end |
├──────────────────────┼──────────────────────┤
│ 2008-06-01 00:00:00 | 2009-10-23 23:00:00 |
└──────────────────────┴──────────────────────┘
Я могу легко получить самый длинный доступный период, используя MIN()
и MAX()
, но как бы я выбрал максимальное из минимальных значений datetime и минимальное из максимальных datetime?
О, и эта таблица содержит 19 000 000 строк, поэтому бонусные баллы за быстрые предложения:)