【发布时间】:2015-06-08 07:56:30
【问题描述】:
我对 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
但这个解决方案对我来说似乎效率低下,因为我必须“复制”所有连接和连接条件。
还有其他方法可以做到这一点吗?我不需要提取所有结果(可能不止一个),所以我也想到了这个解决方案:
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 个?换句话说:我可以确定该行是具有最大日期的行吗?
另外,第二种方法实际上效率更高吗?
谢谢你们!!
【问题讨论】:
-
SELECT 语句总是在查询结束时执行,所以是的,如果你选择顶部,你将在排序后得到第一个
标签: sql sql-server