2011-02-08 4 views
1

Можно ли опустить столбцы агрегата в запросе? В качестве примера:Omit Aggregate Column in SQL Query

SELECT Id, Description, MAX(Created) 
FROM Record 
GROUP BY Id, Description 

Как опустить столбец MAX (Created) из моего результирующего набора? Этот запрос используется в подзапросе, поэтому я могу присоединиться к самой последней записи и опустить старые записи. Я знаю, что это не будет иметь большого значения, но в целом моя практика состояла в том, чтобы вернуть данные, которые вам нужны, и в этом случае я просто хочу присоединиться к самой последней записи и вытащить описание. Мне все равно, что такое дата.

Любые мысли? Неужели я слишком придирчив?

+1

Почему бы не просто переписать запрос и удалить функцию агрегата? Строки запроса бесплатны, и вам не придется платить дополнительно за то, что у вас есть регулярная и сводная версия запроса. –

+0

Укажите весь запрос, чтобы это имело смысл, пожалуйста. –

+0

Почему у вас есть агрегирование в предложении select, если оно вам не нужно? – marapet

ответ

4

Если вы хотите только описание (1 запись) самой последней записи (MAX (создания)), затем

SELECT TOP 1 Id, Description 
FROM Record 
ORDER BY CREATED DESC 
+0

Интересно, это хорошая идея. Есть ли какие-либо мысли о производительности при использовании TOP 1/ORDER BY против выполнения функции MAX? –

+0

@ Ek0nomik - TOP (1), по крайней мере, так же быстро, как MAX. Но даже не беспокойтесь о производительности, беспокоитесь о том, что MAX (x) не дает вам коррелированного описания той же записи, в то время как Top (1). – RichardTheKiwi

0

Если я не понимаю вопрос, не можете ли вы просто удалить столбец, который вы не хотите выбрать?

SELECT Id, Description 
FROM Record 
ORDER BY Created DESC LIMIT 1 
+0

Запрос, указанный выше, является подзапросом, поэтому, если я удалю MAX (Created), то я больше не извлекаю только самые последние записи для присоединения. –

+0

Просто добавьте ORDER BY col LIMIT 1 в ваш подзапрос. – Jon

1
select TOP 1 ID, Description from Record 
    group by ID, Description order by MAX(Created) DESC 

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

И, как упоминалось выше, вы можете даже не нужно агрегатную функцию

select TOP 1 ID, Description from Record order by Created DESC 
+0

Вы поймали меня в середине редактирования моего сообщения, чтобы добавить группировку. :) –

+0

О, хе-хе, извините :) –

+0

SQL позволяет использовать агрегатную функцию без группировки столбцов. Но Ek0nomik не может этого сделать, потому что подзапрос не будет возвращать одни и те же строки. (Не спорить с тобой. Просто быть более явным.) –

-1
SELECT DISTINCT Id, Description 
FROM Record