9

我有以下 TSQL 查询:

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

它检索一长串日期,但我只需要第一个,即第一行中的那个。

我怎么才能得到它?

万分感谢!

4

2 回答 2

19

在 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
于 2012-10-02T10:25:37.313 回答
0

这里有几个选项。您可以使用 Taryn 提到的 TOP(1) 。但是根据文档,为了限制返回的行,最好使用 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
于 2020-02-20T12:39:25.033 回答