SQL:MAX与SELECT TOP 1

时间:2015-06-08 07:56:31

标签: sql sql-server

我对SQL不是很专业,所以请原谅我的新手问题。也是我的基础英语。

我需要从表中提取具有最大日期的行的值。问题是我只能选择一些行,并且条件也会考虑其他表,所以要获得正确的行,我必须与这些其他表进行一些连接。

通常(仅使用一个表),为了解决这个问题,我使用类似这样的SQL语句:

SELECT t1.value
FROM table t1
INNER JOIN (SELECT MAX(date) as maxDate
    FROM table
    WHERE field=3) t2
ON t1.date=t2.maxDate
WHERE t1.field=3

现在,就我所说的情况而言,我需要做类似的事情:

SELECT t1.value
FROM table t1
INNER JOIN otherTable o1 ON o1.key=t1.oKey
INNER JOIN (SELECT MAX(date) as maxDate
    FROM table t2
    INNER JOIN otherTable o2 ON o2.key=t2.oKey
    WHERE t2.field=3 and o2.oField=10) t3
ON t1.date=t3.maxDate
WHERE t1.field=3 and o1.oField=10

但这个解决方案对我来说似乎效率低下,因为我必须重复#34;所有连接和连接条件。

还有其他办法吗?我不需要提取所有结果(可能不止一个),所以我也想到了这个解决方案:

SELECT TOP 1 t.value
FROM table t
INNER JOIN otherTable o ON o.key=t.oKey
WHERE t.field=3 and o.oField=10
ORDER BY t.date DESC

但我不确定结果是否正确:首先对结果进行排序,然后选择前1名?换句话说:我可以确定该行是具有最大日期的行吗?

另外,第二种方法实际上更有效吗?

谢谢你们!!

2 个答案:

答案 0 :(得分:2)

这些帖子也讨论了MAX和TOP 1之间的差异:

MAX vs Top 1 - which is better?

SQL performance MAX()

答案 1 :(得分:0)

要回答您的问题,select top 1max不是一回事。 Select top 1会返回第一行结果集,但该行中的日期/数据并不重要。

如果您使用select top 1 date from table order by date desc,您将获得max日期,所以不用担心。

Select max(date)将始终为您提供最高日期,或者确切地说是最后日期。

相关问题