2016-03-22 12 views
0

したがって、2つのテーブルがあります。mySQLで異なるIDを持つ最新のエントリを選択してください

表: Measuremements

PERSONID - バリュー - タイムスタンプ - TYPEID

表:測定タイプ

のTypeID - 計測名前

私は2最新を表示したいです2つの異なるTypeIDからのエントリ。だから、最新のタイムスタンプを持つTypeID 1と、最新のタイムスタンプを持つTypeID 2の1つのValueを選択する必要があります。また、テーブル間のTypeIDを使用して測定の名前を取得する必要があります。私は選択を特定のPersonIDに限定したいと思う。

私はこれを行うにはさまざまな方法を試しましたが、何をすべきか分かりません。

現時点では私のコードは次のとおりです。

SELECT 
    m.value, 
    m.timestamp, 
    m_t.measurement_name 
FROM measurements m 
INNER JOIN measurement_type m_t ON m.typeid = m_t.typeid 
GROUP BY m.typeid 
ORDER BY timestamp DESC 

私の最初の質問、私は必要に応じて、より良いそれを説明しようとすることができます:D

+0

現在のコードで何が問題になっていますか?あなたは今どのような結果を得ますか? – skrilled

答えて

0

あなたがそれぞれのmaxタイムスタンプを取得するには、サブクエリを使用することができます自分自身に戻って結果を入力し、join

select m.typeid, m.value, m.timestamp, mt.measurement_name 
from measurements m 
    join (select max(timestamp) maxtimestamp, typeid 
      from measurements 
      group by typeid) m2 on m.timestamp = m2.maxtimestamp 
          and m.typeid = m2.typeid 
    join measurement_type mt on m.typeid = mt.typeid 
+0

ありがとう、私はこの問題を永遠に戦ってきました.D – nurre

0

あなたが与えられたid型のための最新のエントリを取得するために、次のクエリを使用することができます:

select m.personID, m.value, m.typeID, mt.measurement_name 
from measurements m join measurements_type mt on m.typeID = mt.typeID 
where m.typeID = ? 
order by m.timestamp desc limit 1; 
+0

これも機能しますが、すべての6つのタイプから最新のエントリとタイプごとに1つのエントリしか必要としないため、ソリューションは少し良く機能しますが、とにかくありがとう、これはSQLをもっとよく理解するのに役立ちました:D – nurre

関連する問題