我的查询大约有20列,为简洁起见,我显示*
SELECT TOP 1
*
FROM
[Frontier].[dbo].[tblLoadFile]
WHERE
TN = 4132644856
ORDER BY
CallTime DESC
我被告知我应该在max
calldate
上使用subquery
,因为它是编写查询的“更快”和“正确”的方式。
我如何以及在哪里放入max(calldate)
子查询?
这适用于SQL Server / T-SQL
答案 0 :(得分:0)
假设您没有尝试更改当前查询的逻辑,那么使用MAX子查询替换TOP 1 / Order by的方式将是这样的:
SELECT *
FROM [Frontier].[dbo].[tblLoadFile]
where TN = 4132644856
AND CallTime = (SELECT MAX(CallTime)
FROM [Frontier].[dbo].[tblLoadFile]
where TN = 4132644856)
但是,正如我在评论中提到的,如果存在平局,这可能会产生多行,并且它不一定更快,具体取决于表的索引方式。
答案 1 :(得分:0)
也许您可以在不使用MAX的情况下考虑,并保证返回一行。
SELECT *
FROM (SELECT *
, ROW_NUMBER() OVER (ORDER BY CallTime DESC) AS Rownum
FROM [Frontier].[dbo].[tblLoadFile]
WHERE TN = 4132644856
) a
WHERE a.Rownum = 1