我有以下 TSQL 查询:
SELECT DISTINCT MyTable1.Date
FROM MyTable1
INNER JOIN MyTable2
ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' ORDER BY MyTable1.Date DESC
它检索一长串日期,但我只需要第一个,即第一行中的那个。
我怎么才能得到它?
万分感谢!
在 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
这里有几个选项。您可以使用 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