2016-11-08 3 views
0

У меня есть 3 колонки,MAX (дата), GroupBy с WHERE

Firm_Name 
Firm_Status 
Firm_Date 

Таблица Название: Test

Я не знаю, почему это doens't похоже на работу,

Select Firm_Name, Firm_Status, Max(Firm_Date) 
From Test 
WHERE 
Firm_Status = 'Incorporated' 
GROUP BY Firm_Name, Firm_Status 

По существу, мне нужна последняя дата в таблице, а также имя и статус.

Я ищу дату Макс в каждой строке. Имеются дубликаты фирменных наименований. Если две строки являются одними и теми же фирмами, и у каждой есть другая дата, я хочу, чтобы максимальная дата вместе с остальной информацией этой фирмы в этой строке.

Спасибо

+2

Что вы подразумеваете под "*, похоже, не работает *?" Что вы подразумеваете под датой «* last *» в таблице? Вы ищете только одну запись? Какая у вас СУБД (SQL Server, MySQL, Oracle и т. Д.)? Можете ли вы предоставить некоторые примеры данных и желаемый результат? – Siyual

+0

См. Здесь для многих примеров: http://stackoverflow.com/questions/tagged/greatest-n-per-group+sql –

+0

Ах, извините, нет. Я ищу дату Max в каждой строке. Имеются дубликаты фирменных наименований. Если две строки являются одними и теми же фирмами, и у каждой есть другая дата, я хочу, чтобы максимальная дата вместе с остальной информацией этой фирмы в этой строке. – ssidenable

ответ

1

Легкий, очень переносимый способ:

Select Firm_Name, Firm_Status, Firm_Date 
From Test 
WHERE Firm_Status = 'Incorporated' 
    and Firm_Date = (select Max(Firm_Date) from test 
        WHERE Firm_Status = 'Incorporated') 
+0

Только что заметил. Редактировал. – jarlh

+0

Извините, я должен был объяснить, что я искал. Я добавил редактирование на свой пост. – ssidenable

0

Вы можете попробовать следующее:

SELECT Firm_Name, Firm_Status, Firm_Date 
    FROM Test 
    WHERE Firm_Date = (SELECT MAX(Firm_Date) FROM Test WHERE Firm_Status = 'Incorporated') 
0

Если вы хотите последнюю дату в таблице, то самый простой способ является fetch first 1 row only и order by:

Select Firm_Name, Firm_Status, Firm_Date 
From Test 
where Firm_Status = 'Incorporated' 
order by firm_date desc 
fetch first 1 row only; 

A group by не нужно, даже отвлекать.

Обратите внимание, что некоторые базы данных задают fetch first 1 row only как limit или select top.