我对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名?换句话说:我可以确定该行是具有最大日期的行吗?
另外,第二种方法实际上更有效吗?
谢谢你们!!
答案 0 :(得分:2)
答案 1 :(得分:0)
要回答您的问题,select top 1
和max
不是一回事。 Select top 1
会返回第一行结果集,但该行中的日期/数据并不重要。
如果您使用select top 1 date from table order by date desc
,您将获得max
日期,所以不用担心。
Select max(date)
将始终为您提供最高日期,或者确切地说是最后日期。