Я не очень разбираюсь в SQL, поэтому извините меня за вопрос новичков. Также для моего основного английского.SQL: MAX и SELECT TOP 1
Мне нужно извлечь из таблицы значение строки (строк) с максимальной датой. Проблема в том, что я могу выбрать только некоторые строки, и условия рассмотрят также другие таблицы, поэтому для получения правильных строк мне нужно сделать некоторые соединения с этими другими таблицами.
Обычно (используя только одну таблицу), чтобы решить эту проблему, я использую оператор 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? Другими словами: могу ли я быть уверенным, что строка совпадает с максимальной датой?
Кроме того, является ли второй метод более эффективным?
Спасибо, ребята!
ЗЕЬЕСТ всегда выполняется в конце запроса да так, если вы отборный вершину вы будете получить первый после сортировки –