Sql select包括top 1 with ties + limit rows

时间:2015-08-24 13:36:40

标签: sql-server

我的代码如下所示。它工作得很好,但是行太多了,我想用LIMIT 0,20限制sql中的结果

select top 1 with ties c.cid, c.cname, c.cmobile, c.cdate, c.email, h.sdate 
From Customers c
LEFT JOIN history h
on c.cid=h.cid 
order by row_number() over (partition by c.cname order by h.sdate desc)

3 个答案:

答案 0 :(得分:0)

第二个TOP语句,使用#temp table。

SELECT TOP 1 WITH TIES c.cid, c.cname, c.cmobile, c.cdate, c.email, h.sdate 
INTO #temp
FROM Customers c
LEFT JOIN history h
   ON c.cid=h.cid 
ORDER BY ROW_NUMBER() OVER (PARTITION BY c.cname ORDER BY h.sdate DESC)

SELECT TOP 20 cid, cname, cmobile, cdate, email, sdate 
FROM #temp
WHERE cid > '2000' AND cid < '3000'
ORDER BY cname ASC

答案 1 :(得分:0)

您可以将它传递给子查询,如下所示:

select top 20 *
from(
   select top 1 with ties c.cid, c.cname, c.cmobile, c.cdate, c.email, h.sdate 
   From Customers c
   LEFT JOIN history h
   on c.cid=h.cid 
   order by row_number() over (partition by c.cname order by h.sdate desc)
) x

答案 2 :(得分:0)

对于Sql Server 2012及更高版本:

select c.cid, c.cname, c.cmobile, c.cdate, c.email, h.sdate 
From Customers c
LEFT JOIN history h
on c.cid=h.cid 
order by row_number() over (partition by c.cname order by h.sdate desc)
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY;
相关问题