2015-04-17 3 views
1

У меня есть таблица, которая выглядит следующим образом:Split столбец в определенном диапазоне в MYSQL

+----------------------- 
| id  | first_name 
+----------------------- 
| AC0089 | John  | 
| AC0015 | Dan  | 
| AC0017 | Marry  | 
| AC0003 | Andy  | 
| AC0001 | Trent  | 
| AC0006 | Smith  | 
+----------------------- 

Мне нужен запрос, чтобы разделить идентификатор в диапазоне 3, а также отображать начальный идентификатор этого диапазона т.е.

+------------+----------+-------- 
| startrange | endrange | id     
+------------+----------+-------- 
|   1 |  3 | AC0089 
|   4 |  6 | AC0003 
+------------+----------+-------- 

Я довольно новый для SQL и пытаемся ниже запрос, но я не думаю, что я нахожусь рядом с правильным решением на всех! Вот запрос:

select startrange, endrange, id from table inner join (select 1 startRange, 3 endrange union all select 4 startRange, 6 endRange) r group by r.startRange, r.endRange; 

Это дает тот же идентификатор каждый день и я не могу придумать любое другое решение. Как я могу получить требуемый результат?

ответ

1

Попробуйте

SET @ct := 0; 
select startrange,(startrange + 2) as endrange, seq_no from 
(select (c.st - (select count(*) from <table_name>)) as startrange, c.* from 
(select (@ct := @ct + 1) as st, b.* from <table_name> as b) c 
having startrange mod 3 = 1) as cc; 

жаль форматированием.

+0

startrange mod 3 = 0 возвращает результат (mod 3 = 1 возвращает пустой набор). Более того, startrange и endrange отображают отрицательные значения. например, для 150 записей - от -150 до -148. Не могли бы вы продолжить просмотр и изменение своего ответа? – ani0710

+0

, работающий для меня, проверяет http://sqlfiddle.com/#!2/8e4e4/1 –

+0

«select count (*) from » запрос должен соответствовать вашим основным критериям выбора. –

0

Я не совсем уверен, что вы пытаетесь сделать, но если вы пытаетесь преобразовать таблицу идентификаторов в диапазоны, используйте случай, когда.

CASE WHEN startrange in(1,2,3) THEN 1 
    ELSE NULL 
END as startrange, 

CASE WHEN endrange in(1,2,3) THEN 3 
    ELSE NULL 
END as endrange, 

CASE WHEN ID in(1,2,3) THEN id 
    WHEN ID in(4,5,6) THEN id 
    ELSE id 
END AS ID 
Смежные вопросы