@Proshka17

Как написать запрос на sql?

Добрый день.
У меня есть таблица, содержащая одно целочисленное поле (со знаком) NUM. В каждой строке
этой таблицы записано случайное число.
Каждое число встречается в таблице произвольное количество раз.
Нужно найти максимальный по длине непрерывный (без пропущенных чисел) диапазон,
представленный в таблице.

Заранее спасибо за помощь.
  • Вопрос задан
  • 626 просмотров
Пригласить эксперта
Ответы на вопрос 3
@atawerrus
select max(field) as max_field from table_name
Ответ написан
Комментировать
@Oleg_Yozhik
Android / Web программист
Такое нельзя сделать одими лишь средствами SQL без вложенных запросов, так как SQL не позволяет получить значение "перед" и "после" текущей записи. Соответсвенно и нет возможности получить их разницу между ними.

Подобное обсуждалось тут https://stackoverflow.com/questions/3139323/findin...
Ответ написан
Комментировать
bezrukovPS
@bezrukovPS
Ведущий программист 1С-Битрикс
set @lst := NULL;
set @grp := 0;
SELECT MAX(grp.cnt) AS max_range
FROM (
	SELECT COUNT( rp.grp) AS cnt
	FROM (
		SELECT 
			MIN(r1.id) AS r1_id,
			MIN(r1.num) AS r1_num,
			MIN(r2.num) AS r2_num,
			if ( r1.num > @lst + 1, @grp := @grp + 1, @grp) AS grp,
			@lst := r1.num AS lst
		FROM testing.integer_range as r1
		JOIN testing.integer_range AS r2 ON r1.num = r2.num + 1 OR r1.num = r2.num - 1
		GROUP BY r1.num
    ORDER BY r1.num ASC
	) AS rp
	GROUP BY rp.grp
) AS grp;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы