2016-03-21 8 views
3

私はいくつかの列で構成されるログと呼ばれるテーブルがあります。SQLの各日の特定の列を持つ最後の行を取得

id |状態|結果|タイムスタンプ

「成功した」という状態のすべての行が必要ですが、ランダムに表示されますが、表示されない日もありますし、2度表示される表示もあります。ですから、1日に複数の場合は、最後のものを取得する必要があります。

誰かに私にその方法を教えてもらえますか?

ありがとうございます!

答えて

2

は、1つの方法です。

+0

w00tを編集してください。ありがとうございます:) –

+0

条件 "と日付(l2.timestamp)=日付(l.timestamp)"は不要です。 –

+0

@AdamSilenko。 。 。質問は1日当たり最後の記録を求めています。これを達成する方法の1つです。 –

1

あなたはID、最後のタイムスタンプのための状態と結果=「成功-変更」、多分この意志毎日のために必要な場合はたぶん、あなたは

select id , state , max(timestamp) 
from logs 
where result = 'success-changed' 
group by id , state 
order by 3 desc 

...を選択することで、グループで順番を追加必要

タイムスタンプフィールドにはインデックスが必要です。

select l.* 
from logs l 
where l.result = 'success-changed' and 
     l.timestamp = (select max(l2.timestamp) 
        from logs l2 
        where l2.result = 'success-changed' and 
          date(l2.timestamp) = date(l.timestamp) 
        ); 

これはtimestampdatetime値として記憶されていることを前提としています。ここ

+0

それでも、1日に複数の行が表示されます。 https://gist.github.com/RonMelkhior/085ce6df379704844e25 –

+0

@RonMelkhior私はあなたがidとstateの代わりに 'date(timestamp)'でグループ化すると思います – FuzzyTree

+0

idと状態が1日必要ならばDATE(タイムスタンプ)でグループ化します –

関連する問題