TSQL仅显示第一行

时间:2012-10-02 10:24:32

标签: tsql select limit

我有以下TSQL查询:

SELECT DISTINCT MyTable1.Date
  FROM MyTable1 
INNER JOIN MyTable2 
ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' ORDER BY MyTable1.Date DESC

它检索了很长的Dates列表,但我只需要第一行,即第一行中的那一行。

我怎样才能得到它?

非常感谢!

2 个答案:

答案 0 :(得分:10)

在SQL Server中,您可以使用TOP

SELECT TOP 1 MyTable1.Date
FROM MyTable1 
INNER JOIN MyTable2 
  ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' 
ORDER BY MyTable1.Date DESC

如果您需要使用DISTINCT,则可以使用:

SELECT TOP 1 x.Date
FROM
(
   SELECT DISTINCT MyTable1.Date
   FROM MyTable1 
   INNER JOIN MyTable2 
     ON MyTable1.Id = MyTable2.Id
    WHERE Name = 'John' 
) x
ORDER BY x.Date DESC

甚至:

SELECT MAX(MyTable1.Date)
FROM MyTable1 
INNER JOIN MyTable2 
  ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' 
--ORDER BY MyTable1.Date DESC

答案 1 :(得分:0)

这里有几个选项。您可以使用Taryn提到的TOP(1)。但是根据docs,为了限制返回的行,最好使用OFFSET和FETCH。

我们建议您使用OFFSET和FETCH子句而不是TOP子句来实现查询分页解决方案并限制发送到客户端应用程序的行数。

使用OFFSET和FETCH作为分页解决方案时,需要为返回到客户端应用程序的每个“页面”数据运行一次查询。例如,要以10行为增量返回查询结果,必须执行一次查询以返回第1至10行,然后再次运行查询以返回第11至20行,依此类推。

假设,使用OFFSET和FETCH方法解决问题的方法可能是:

SELECT DISTINCT MyTable1.Date
  FROM MyTable1 
INNER JOIN MyTable2 
ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' ORDER BY MyTable1.Date DESC
OFFSET 0 ROWS
FETCH NEXT 1 ROW ONLY