我的代码如下所示。它工作得很好,但是行太多了,我想用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)
答案 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;