Я думаю, что мы можем перефразировать вашу логику здесь, чтобы она работала так, как вы хотите:
WITH cte AS (
SELECT ColumnA, ROW_NUMBER() OVER (ORDER BY index DESC) rn
FROM yourTable
)
(your query here)
WHERE (SELECT ColumnA FROM cte WHERE rn = 1) = 1;
Приведенное выше предложение WHERE
вернет либо true, либо false, и будет применяться ко всем записям в потенциальной набор результатов из вашего запроса. То есть, если бы значение ColumnA
из «последней» записи было равно 1, вы бы вернули весь набор результатов, в противном случае это был бы пустой набор.
Предполагая, что ваша версия MariaDB не поддерживает ни ROW_NUMBER
, ни CTE, используйте:
(your query here)
WHERE (SELECT ColumnA FROM yourTable ORDER BY index DESC LIMIT 1) = 1;
Встраивание является ответственностью CLR (JIT) и существуют некоторые условия относительно того, когда функция встраивается:
Как Вы, вероятно, узнаете, 32 байта не очень с точки зрения кода, это подходит для быстрого и маленького если еще тестирование условия, свойство, getters/setters. Я не думаю, что можно получить любую скорость от встраивания большего объема кода.
Ответы, которые я видел, предполагают, что Вы говорите о компиляции или разовом JIT встраивании - и они совершенно корректны. Однако другое использование слова, "встроенного", который я услышал, для вещей как лямбда-выражения - в C#, вещах как:
public IEnumerable<int> Foo()
{
int[] numbers = new[] { 1, 5, 2, 5, 6 };
return numbers.Select(x => x+10);
}
x => x+10
(лямбда-выражение), может рассматриваться как "подставляемая функция" в терминах исходного кода, в которых это - дополнительная функция, объявленная "встроенной" в другом методе.
И да, VB9 имеет это:
Dim len As Func(Of String, Integer) = Function(x) x.Length
Console.WriteLine(len("foo"))
Я полагаю, что существует больше ограничений в VB9 по сравнению с C#, хотя - например, я не думаю, что можно создать Action<T>
(или любой другой делегат вводит с пустым типом возврата), использование лямбда-выражения в VB9, тогда как это легко в C#. Аналогично я полагаю, что лямбда должна быть просто отдельным выражением в VB9, тогда как в C# это может быть целый блок в фигурных скобках.
С VB10 можно создать многострочные лямбда-выражения в VB также.
Конечно, если вопрос действительно относился к выполнению, а не исходному коду, все это не важно :)
Команда.NET мудро решила, что такие функции не имеют никакого места на самом языке программирования, так как компилятор лучше в решении, что встроить так или иначе. Это помещает его скорее настойчиво, но факт - то, что современный C++ на самом деле часто игнорирует inline
инструкция для их процесса принятия решений, о который функции встроить.
Вы не можете объявить функцию как встроенную явно, но оптимизатор JIT свободен к подставляемым функциям, если он видит преимущество.
Вот один сценарий, когда это было бы неплохим средством:
У нас есть стандартная функция ведения журнала, в которую часто бывает полезно передать имя вызывающего. Однако, если ведение журнала установлено на низкий уровень детализации, функция ведения журнала просто возвращается, чтобы повысить производительность. Чтобы вызывающий абонент не делал дорогостоящих для процессора вызовов System.Reflection.MethodBase.GetCurrentMethod.Name, только для того, чтобы функция ведения журнала не использовала их, было бы неплохо, если бы мы могли создать встроенную функцию, которая заранее решала, стоит ли беспокоиться об обнаружении имя метода:
Public Inline Function GetMyname(iLogLevel) as string
if iLogLevel < 3 then return ""
return System.Reflection.MethodBase.GetCurrentMethod.Name()
End Function
Затем в вызывающей программе мы могли бы поместить аккуратную строку вроде:
Log (2, GetMyname (2) & «: Что-то произошло»)
Но если компилятор решит не встраивать GetMyname () (как и должно быть), тогда имя метода, которое будет отображаться в журнале, всегда будет «GetMyName» - вообще бесполезно.
Назовите меня старомодным, но если мы начнем оставлять все решения компилятору (или CLR!), Тогда мы можем с таким же успехом искать новую карьеру и оставить это «команде .Net». Иногда разработчики программного обеспечения ДЕЙСТВИТЕЛЬНО знают лучше всех?