2014-10-11 90 views
0

我有一个表有多个路径的共享我想要获取所有路径,其中这些路径中的前N个不同Servername作为示例在这里整个表。获取n个组的所有记录

+----+--------------------------------+ 
| ID | BACKUPPATH      | 
+----+--------------------------------+ 
| 1 | //server.domain/share/folder | 
| 2 | //server.domain/share/folder3 | 
| 3 | //server.domain/share/folder2 | 
| 4 | //server2.domain/share/folder1 | 
| 5 | //server2.domain/share/folder2 | 
| 6 | //server3.domain/share/folder1 | 
| 7 | //server3.domain/share/folder2 | 
| 8 | //server3.domain/share/folder3 | 
+----+--------------------------------+ 

服务器名称可能会有所不同,每个不同的Servenames可能会有所不同。作为例子,我希望得到我期望的那样结果前2个不同servernames节点的所有路径:

+----+--------------------------------+ 
| ID | BACKUPPATH      | 
+----+--------------------------------+ 
| 1 | //server.domain/share/folder | 
| 2 | //server.domain/share/folder3 | 
| 3 | //server.domain/share/folder2 | 
| 4 | //server2.domain/share/folder1 | 
| 5 | //server2.domain/share/folder2 | 
+----+--------------------------------+ 

为子查询我用下面的查询来获取servernames节点的行集:

select SUBSTRING_INDEX(BACKUPPATH,'/',3) as SERVERNAMES from(select BACKUPPATH from Backuppaths GROUP BY SUBSTRING_INDEX(BACKUPPATH,'/',3))as NUMEROFSERVERS LIMIT 2; 

+------------------+ 
| SERVERNAMES  | 
+------------------+ 
| //server.domain | 
| //server2.domain | 
+------------------+ 

我被困现在在如何使用这个子查询来获得我期望的结果。

感谢在这个

回答

1

任何帮助,您可以加入到联视图:

select s.* 
    from servernames s 
    join (select substring_index(backuppath, '/', 3) as servername 
      from servernames 
     group by servername 
     order by min(id) limit 2) v 
    on substring_index(backuppath, '/', 3) = v.servername 
order by id 

Fiddle:http://sqlfiddle.com/#!2/b6a16/1/0

+2

你应该使用'组by'在子查询中,而不是独特的:'按服务器名组顺序排列m在(id)限制2'中。 OP要求提供前两个服务器名称。 – 2014-10-11 14:35:10

+0

@GordonLinoff谢谢,改变 – 2014-10-11 14:49:23

+0

亲爱的布莱恩,优秀的作品完美! – TReisser 2014-10-12 07:10:47

0

使用Distinct

SELECT DISTINCT SUBSTRING_INDEX(BACKUPPATH,'/',3) AS SERVERNAMES FROM Backuppaths LIMIT 2;