我有以下TSQL查询:
SELECT DISTINCT MyTable1.Date
FROM MyTable1
INNER JOIN MyTable2
ON MyTable1.Id = MyTable2.Id
WHERE Name = 'John' ORDER BY MyTable1.Date DESC
它检索了很长的Dates列表,但我只需要第一行,即第一行中的那一行。
我怎样才能得到它?
非常感谢!
答案 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