MAX

2016-11-08 2 views
0

が、私は3列がWHEREで(日付)、GROUPBY、MAX

Firm_Name 
Firm_Status 
Firm_Date 

テーブル名:テスト

私はこれが動作するようには思えdoens't理由はわからない

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

基本的に、テーブルの最後の日付と、名前とステータスが必要です。

各行の最大日付を探しています。重複した会社名があります。 2つの行が同じ会社で、それぞれの日付が異なる場合は、その行のその会社の残りの情報と一緒に最大の日付を欲しがります。

+2

「*は動作していないようですか?」とはどういう意味ですか?テーブルの "* last *"日付はどういう意味ですか? 1つのレコードしか探していませんか?あなたのDBMS(SQL Server、MySQL、Oracleなど)は何ですか?いくつかのサンプルデータと希望の結果を提供できますか? – Siyual

+0

多くの例はこちらをご覧ください:http://stackoverflow.com/questions/tagged/greatest-n-per-group+sql –

+0

ああ、申し訳ありません、いいえ、私は各行に最大の日付を探しています。重複した会社名があります。 2つの行が同じ会社で、それぞれの日付が異なる場合は、その行のその会社の残りの情報と一緒に最大の日付を欲しがります。 – 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; 

group byは気をそらさなくてもかまいません。

一部のデータベースではfetch first 1 row onlylimitまたはselect topと綴ります。