2013-11-20 5 views
0

У меня есть таблица с столбцами DateTime и Value. Мне нужно выбрать максимальное значение с последнего дня (новейшего) дня. Лучшее, что я мог придумать это 3 шага процесса:SQL select MAX value from last day

  1. SELECT MAX(DateTime) FROM MyTable
  2. избавиться от части времени в DateTime, дата магазин
  3. SELECT MAX(Value) FROM MyTable WHERE DateTime>date

Есть ли лучший способ сделать это ?

+1

Какие rdbms вы используете? –

+0

Я использую firebird. –

+1

@FreshPrinceOfSO проверить тег –

ответ

2

Ваши три шага в одном запросе будет

SELECT MAX(Value) 
FROM MyTable 
WHERE DateTime >= CAST((SELECT MAX(DateTime)FROM MyTable) AS DATE) 

Теперь найти максимальную дату может быть довольно дорогим запрос, так что если вы на самом деле после вчерашнего максимального значения, то вы должны использовать CURRENT_DATE вместо этого, т.е.

WHERE DateTime >= (CURRENT_DATE - 1) AND DateTime < CURRENT_DATE 
+0

Это состояние также будет выбирать поля сегодня (или завтра). –

+0

Поскольку мы выбираем максимальную дату, не может быть никаких «завтрашних записей». Но запрос с CURRENT_DATE должен быть исправлен, то есть, правильно. – ain

+0

Спасибо @ain! Трюк с CAST был тем, что я искал. –

0

Можете ли вы просто сделать это?

SELECT MAX(Value) 
FROM MyTable 
WHERE DateTime IN (
    SELECT MAX(DateTime) 
    FROM MyTable 
) 
+0

Я думаю, что он хочет последнее значение со вчерашнего дня (_ «с последнего дня» _). –

+0

Что произойдет, если в последний день есть несколько значений? –

+0

@OtoZars: он должен выбрать наибольшее значение последнего дня. – voithos

1

Если вы имеете в виду высокое значение сегодня, то вы можете использовать:

SELECT MAX(value) 
FROM MyTable 
WHERE CAST(DateTime AS DATE) = CURRENT_DATE 
+0

Возможно, я был недостаточно ясен. Я не имею в виду самую высокую ценность сегодняшнего дня. Я имею в виду самую высокую ценность всего дня с наивысшим временем. Этот день может быть сегодня, этот день может быть вчера и днем, который может быть днем ​​на прошлой неделе. –