2017-10-31 8 views
0

他の列をグループ化して最大列値を取得しようとしています。私はほとんど近くにいますが、最後の点で立ち往生しています。ここで私はコードである対応する他の列の最大値を表示する方法

TABLE:

 id . sys_id  . renewal 
     1 . aaad00101  . 0 
     2 . aaad00101  . 1 
     3 . aaad00104  . 0 
     4 . aaad00102  . 0 
     5 . aaad00101  . 2 
     6 . aaad00103  . 0 

SQLクエリ:

 "SELECT * FROM $company WHERE renewal IN (SELECT DISTINCT 
     MAX(renewal)FROM $company GROUP BY sys_id) ORDER BY sys_id" 

結果:

 aaad00101-0 
    aaad00101-2 
    aaad00102-0 
    aaad00103-0 
    aaad00404-0 

私のコードは、上の2つの結果のような最小値と最大値を示しています。しかし、最大値が表示されている場合は、結果に最小値を表示すべきではありません。

ここで私が迷っていることを教えてください。 おかげでそれを修正

SQLクエリ:私はあなたが最大を示し、追加の列を使用して、テーブルにあなたが現在持っているすべての行を維持したいという

"SELECT * FROM $company WHERE id IN (SELECT DISTINCT MAX(id)FROM 
    $company GROUP BY sys_id) ORDER BY sys_id"; 
+0

あなたは少し欲しいものを詳しく説明できますか?私はあなたの質問でちょっと混乱していますが、もしあなたがおそらくそれをよりよく言えるならば、それは簡単な修正のようです。おそらく、手動で入力するかsqlfiddleリンクを作成して、結果セットを表示しますか? – user2278120

+0

sys_idで最大限更新する必要がありますか?はいの場合は、次のようにします。 SELECT MAX(更新)、sys_id FROM $ company GROUP BY sys_id; –

+0

@ user2278120同じsys_idを持つ単一レコードを表示したい。しかし、私は最初のものではなく、更新コラムを使って最新のエントリーが必要です。だから私は最大(更新)を選択している。私が何を記述しようとしているのか理解してもらいたいと思います。 –

答えて

0

を修正アム各sys_idの更新値?

これはウィンドウ関数で頻繁に行われることですが、MySQLには現在その機能がありませんので、追加の結合で回避することができます。

SELECT *、 を b.last_renewal会社からの は、JOIN(SYS_ID)を使用して、bと(、 MAX(リニューアル)AS last_renewal 社から GROUP BY SYS_ID SYS_IDを選択)など。

または、最新のオカレンスの更新値を探していますか?これはid列の最大値を前提としていますか?

この場合、すべての更新値をリストに連結し、そのリストをidで順序付けることができます。そして、そのリストの最後の値を取り出すことができます。

SELECT SYS_ID、 SUBSTRING_INDEX(ID BY GROUP_CONCAT(リニューアルORDER)、 ''、 - 1)AS last_renewal、 MAX(ID)SYS_ID BY会社 グループからlast_occurance AS;

+0

あなたのトップクエリは結果をフェッチしていますが、今は私に更新のエラーと他の列と2番目のクエリが重複したエントリを取得しています。 –

+0

「更新エラー」の意味を具体的に説明できますか?また、2番目のクエリで "重複エントリ"とはどういう意味ですか? sys_idでグループ化されているため、列には重複がありません。 –

+0

私はsys_id列で行をグループ化しているので、重複したエントリは表示されません。しかし、それでは最新のエントリーがどれくらいあるかを1 2 3で決めるコラムリニューアルの最新エントリーが必要です。今のところ私の質問では、最も古い0と最新のエントリ2が表示されています。しかし、最も古いエントリ2ではなく最新のエントリ2が必要です。結果を参照して、私が言っていることを見て欲しいです。 –

関連する問題