Есть ли какая-либо вещь, такая как ВЫБОР В ПОСЛЕДНИЙ РАЗ в запросе SQL?

Хотя вы можете быть уверены, что каждый путь через метод будет возвращать значение, компилятор не выполняет этот уровень анализа. ИТ не смотрит на условия, поэтому видит: if (Something) else if (something else) else if (something else). Чего он не видит, так это того, насколько это возможно, можно добраться до конца метода, не удовлетворяя ни одному из условий и, следовательно, ничего не возвращая.

Чтобы решить эту проблему в вашем случае, можно просто сделать:

private bool CheckDaysDiff(int daysDiff)
{
    if (daysDiff < 0)
    {
        return false;
    }
    else
    {
        return true;
    }
}

В качестве альтернативы, если ваш код не является правильно указывающим, вы можете просто добавить что-то до конца оператора, чтобы либо вернуть, либо бросить исключение в зависимости от того, какое поведение вы хотите. Если вы уверены, что он никогда не дойдет до конца метода, тогда, вероятно, наиболее подходящим является исключение (потому что, если оно туда попадает, то происходит что-то исключительное). например:

private bool CheckDaysDiff(int daysDiff)
{
    if (daysDiff < 0)
    {
        return false;
    }
    else if (daysDiff >= 1)
    {
        return true;
    }
    else if (daysDiff == 0)
    {
        return true;
    }
    throw new Exception("Should never reach here.");
}
6
задан Taryn 16 July 2013 в 01:36
поделиться

7 ответов

SELECT TOP 1 * 
FROM dbo.YourTable 
ORDER BY Col DESC

В Вашем случае я предполагаю, что это было бы

SELECT TOP 1 charges.mistotal 
FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC
9
ответ дан 8 December 2019 в 17:31
поделиться

Под какими критериями Вы принимаете решение выбрать 25.00 вместо 7.5?

Если его связанное с максимальным значением, можно попытаться использовать МАКСА (), функционируют на том поле.

Если его связанные с хронологически последней добавленной строкой, попытайтесь использовать МАКСА () на поле даты и времени, если у Вас есть детали о часах и минутах, это было добавлено.

2
ответ дан 8 December 2019 в 17:31
поделиться

Вы могли попробовать это:

SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id
1
ответ дан 8 December 2019 в 17:31
поделиться

Для получения первыми, Вы используете избранный лучший 1 | сначала * от порядка таблицы, возрастающего, чтобы добраться в последний раз, просто инвертировать Ваш порядок.

1
ответ дан 8 December 2019 в 17:31
поделиться

ВЫБЕРИТЕ TOP 1 charges.mistotal ИЗ зарядов где items.id = charges.id ORDER BY charges.id DESC

Порядок пунктом удостоверится, что возвращается в порядке идентификатора, и DESC означает убывать так, он даст Вам самое большое (новейшее) значение сначала. TOP 1, конечно, удостоверяется, что Вы просто получаете тот.

0
ответ дан 8 December 2019 в 17:31
поделиться

Так, можете Вы использовать обратный порядок:

(SELECT TOP 1 charges.mistotal
    FROM charges
    WHERE items.id = charges.id
    ORDER BY charges.mistotal DESC
)

На самом деле, так как Вы не давали явное распоряжение, последовательность возвращенных результатов не определена, и Вы просто удачливы, что она дала Вам ответ, который Вы не хотели; это, возможно, дало Вам ответ, который Вы хотели, и затем Вы, возможно, не заметили, что это было не всегда корректно, пока это не вошло в производство.

Или, можете Вы использовать:

(SELECT MAX(charges.mistotal)
    FROM charges
    WHERE charges.id = items.id
)

Или Вы действительно хотели СУММУ?

1
ответ дан 8 December 2019 в 17:31
поделиться

Отсортируйте свой подзапрос. Если Вы хотите "последнее" значение, необходимо определить, как Вы определяете, какой объект является последним (помните, наборы результатов SQL не заказаны по умолчанию).

Например:

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id 
 ORDER BY charges.mistotal DESC)

Это возвратилось бы 25.00 вместо 7,50 (от Ваших примеров данных выше), но я предполагаю, что Вы хотите, чтобы это значение было "последним", потому что это больше. Может быть некоторое другое поле, на котором это имеет больше смысла для Вас к виду; возможно, у Вас есть столбец метки времени, например, и Вы могли отсортировать на этом для получения нового значения вместо самого большого значения. Ключ просто определяет то, под чем Вы подразумеваете "в последний раз".

0
ответ дан 8 December 2019 в 17:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: