2014-04-25 50 views
1

获取第一条记录我有这样SQL服务器 - 从一组

http://i.imgur.com/2uLQBT0.jpg

我想下面的代码,以获得第一条记录从“的AdID”组

;with cte as 
(
    select 
    ADID, 
    PhotoName, 
    PhotoPath, 
    rank() over(partition by AdID order by PhotoName) as rn 
    from AdPhoto 
) 
select ADID, 
    PhotoName, 
    PhotoPath 
from cte 
where rn = 1 

一个表,但事实证明出这样的

AD1001 temptemp_1.jpeg ~/UserUploads/temptemp/ 
AD1002 temptemp_10.jpg ~/UserUploads/temptemp/ 

输出我想这样一个

输出
AD1001 temptemp_1.jpeg ~/UserUploads/temptemp/ 
AD1002 temptemp_5.jpg ~/UserUploads/temptemp/ 

请帮

+2

如果你显示的数据是准确的,它似乎你想按ID排序你的排名。如果你想通过你的文件名的“数字”部分进行排序,你需要运行一个子串来获取文件名中的数字和顺序。 –

回答

2

请尝试order by ID而不是order by PhotoName

;with cte as 
(
    select 
    ADID, 
    PhotoName, 
    PhotoPath, 
    rank() over(partition by AdID order by ID) as rn 
    from AdPhoto 
) 
select ADID, 
    PhotoName, 
    PhotoPath 
from cte 
where rn = 1 
+0

另一个问题如果“ID”列不可用。你如何获取记录 – Amjath

0

这将帮助这个特殊的一组数据:

;with cte as 
(
    select 
    ADID, 
    PhotoName, 
    PhotoPath, 
    rank() over(partition by AdID order by len(PhotoName) asc, PhotoName) as rn 
    from AdPhoto 
) 
select ADID, 
    PhotoName, 
    PhotoPath 
from cte 
where rn = 1 

但我建议要么改变photoname的命名方案,或找到其他的排序算法。

+0

谢谢你也帮助。我非常喜欢为PhotoName更改命名方案的想法。你能提出一些建议吗? – Amjath