2013-04-12 4 views
2

Я хочу извлечь максимум один столбец в таблице, который соответствует некоторым критериям. Я пробовал следующий SQL:Макс и где пункт

Select Name, Max(version) from table1 where name="Asdf"; 

Я получаю набор результатов, который имеет больше имен, чем я дал в разделе where. Как вы думаете, что неправильно с вышеуказанным запросом?

Спасибо заранее

Примечания: его Sybase Database

ответ

5

Вы не можете смешивать агрегатные функции и нормальные выбирают столбцы. Попробуйте

select max(version) 
from table1 
where Name = 'Asdf' 

или использовать group by, чтобы получить все имена и их max(version):

select Name, Max(version) 
from table1 
group by Name 
2

Вы должны использовать пункт group by при работе с агрегатными функциями:

Select Name, Max(version) from table1 where name="Asdf" Group by Name 
1

Это происходит потому, что вы не включаете поле имени в свой выбор. если вы хотите получить это, то попробуйте ...

Select top 1 name, version 
from table1 
where name = 'Asdf' 
order by version desc 
0

Это должно вернуть вам набор данных, который вы ищете. Он должен предоставить только максимальную версию для имени «Asdf». Если это не тот набор данных, который вы хотели, дайте пример набора данных.

SQL запросов:

Select Name, version 
from table1 
where name="Asdf" 
having max(version) = version 

, если есть более чем одна строка в базе данных с тем же именем и максимальной версии, и вы хотите только одна строка, возвращенная в наборе данных. Сделайте эти изменения в

SQL Query:

Select top 1 Name, version 
from table1 
where name="Asdf" 
having max(version) = version 

или если вы хотите сделать набор имен:

Select distinct Name, version 
from table1 
where name in ("Asdf", "ghjk") 
having max(version) = version 
Смежные вопросы