将列拆分为MYSQL中的已定义范围

时间:2015-04-17 12:36:22

标签: mysql

我有一张看起来像这样的表:

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

我需要一个查询来分配范围为3的id,并显示该范围的起始ID,即

+------------+----------+--------
| 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;

它每次都提供相同的ID,我无法提出任何其他解决方案。我如何获得所需的输出?

2 个答案:

答案 0 :(得分: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;

抱歉格式化。

答案 1 :(得分:0)

我不完全确定你要做什么,但是如果你想把ID的表转换成范围,请使用一个案例。

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