Разделение диапазона дат SQL

Трудно сказать без дополнительной информации. Но это может быть связано с несовместимыми библиотеками . Можете ли вы опубликовать свои зависимости?

В случае, если вы используете более старую версию okhttpclient с последней весенним облаком: гринвич, это может вызвать эту проблему.

Я использую Greenwich.RELEASE с okhttpclient: 10.2.0 , который работает без проблем

7
задан casperOne 20 March 2014 в 13:35
поделиться

2 ответа

Это должно добиться цели (диалект MySQL, но легко адаптируемый)

Начальная настройка

SQL query: SELECT * FROM `test` LIMIT 0, 30 ;
Rows: 3
start       end
2008-01-01  2010-12-31
2009-01-01  2012-12-31
2009-01-01  2014-12-31

Запрос

SELECT 
  `start` , min( `end` )
FROM (
  SELECT t1.start, t2.end
  FROM test t1, test t2
  WHERE t1.start < t2.end
  UNION
  SELECT t1.end + INTERVAL 1 DAY , t2.end
  FROM test t1, test t2
  WHERE t1.end + INTERVAL 1 DAY < t2.end
  UNION
  SELECT t1.start, t2.start - INTERVAL 1 DAY
  FROM test t1, test t2
  WHERE t1.start < t2.start - INTERVAL 1 DAY
) allRanges
GROUP BY `start`

Результат

start       min( `end` )
2008-01-01  2008-12-31
2009-01-01  2010-12-31
2011-01-01  2012-12-31
2013-01-01  2014-12-31
6
ответ дан 7 December 2019 в 05:33
поделиться

Ответ Skliwz адаптирован к SQL Server:

DECLARE @DateTest TABLE 
(
    FromDate datetime,
    ToDate datetime 
)

insert into @DateTest (FromDate, ToDate)
(
select cast('1/1/2008' as datetime), cast('12/31/2010' as datetime)
union
select cast('1/1/2009' as datetime), cast('12/31/2012' as datetime)
union
select cast('1/1/2009' as datetime), cast('12/31/2014' as datetime)
)

SELECT 
  FromDate , min(ToDate)
FROM (
  SELECT t1.FromDate, t2.ToDate
  FROM 
    @DateTest t1, 
    @DateTest t2
  WHERE t1.FromDate < t2.ToDate

  UNION

  SELECT dateadd(DAY, 1, t1.ToDate), t2.ToDate
  FROM 
    @DateTest t1, 
    @DateTest t2
  WHERE dateadd(DAY, 1, t1.ToDate) < t2.ToDate
) allRanges
group by FromDate
2
ответ дан 7 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: