2016-06-21 25 views
1

目标:根据字段'DOCURL'和'ELEMENT'获取不同的值。使用行号时选择不同的行

注:(editted)以下为不应该在SQL

问题在.aspx页面上使用的:如果我作为一个独立的查询,我得到14行,这是正确运行;

Select DISTINCT DOCURL, ELEMENT From TblReference Where Property= 'XYZ' 

我的代码拉起来34,我已经将Row_Number更改为DENSE_RANK,但仍然不能下降到14;

Select * from(Select DISTINCT DOCURL, ELEMENT, 
DENSE_RANK() over (order by id desc) As rn From TblReference 
Where Property= 'XYZ') as t Where rn = 1 

***该rn在一个可变循环中正常计数到10。

参考:sql query distinct with Row_Number -

SELECT distinct id, DENSE_RANK() OVER (ORDER BY id) AS RowNum 
FROM table 
WHERE fid = 64 
+0

MySQL不支持窗口功能! – sagi

+0

代码工作现场栏上删除不同,在.NET代码中,它通常是它开始...对于i = 1到10 sSQL =“Select * from(Select id,DOCURL,VFMDISCIPLINEELEMENT,row_number()over (order by id desc)As String From TblData Where UPRN ='“&Session.Item(”pUPRN“)。ToString&”')as t其中rn =“&i&”“ dsNames.SelectCommand = sSQL – indofraiser

回答

1

由于MySQL不支持像ROW_NUMBER()DENSE_RANK()窗口功能,尝试做一个连接:

Select t.DOCURL, t.ELEMENT 
From TblReference t 
LEFT JOIN TblReference s 
    ON(t.docurl = s.docurl and t.element = s.element and s.id < t.id and s.property = 'XYZ') 
Where t.Property= 'XYZ' AND s.id is null 
ORDER BY t.OrderColumn 
LIMIT 10; 

我不知道你怎么样使用这个功能,但是你的问题是你没有使用PARTITION BY部分:

Select * 
from(Select DISTINCT DOCURL, ELEMENT, 
      ROW_NUMBER() over (PARTITION BY docurl,element order by id desc) As rn 
    From TblReference 
    Where Property= 'XYZ') t 
Where t.rn = 1 
+0

谢谢,我需要限制这个前十名,请参阅上面的修改,代码将在.aspx页面上,所以我可能误导了最初的帖子(注意添加) – indofraiser

+0

对不起,我不知道PHP。这个查询有什么问题? @indofraiser – sagi

+0

查看编辑@indofraiser – sagi