私はいくつかの列で構成されるログと呼ばれるテーブルがあります。SQLの各日の特定の列を持つ最後の行を取得
id |状態|結果|タイムスタンプ
「成功した」という状態のすべての行が必要ですが、ランダムに表示されますが、表示されない日もありますし、2度表示される表示もあります。ですから、1日に複数の場合は、最後のものを取得する必要があります。
誰かに私にその方法を教えてもらえますか?
ありがとうございます!
私はいくつかの列で構成されるログと呼ばれるテーブルがあります。SQLの各日の特定の列を持つ最後の行を取得
id |状態|結果|タイムスタンプ
「成功した」という状態のすべての行が必要ですが、ランダムに表示されますが、表示されない日もありますし、2度表示される表示もあります。ですから、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)
);
これはtimestamp
はdatetime
値として記憶されていることを前提としています。ここ
それでも、1日に複数の行が表示されます。 https://gist.github.com/RonMelkhior/085ce6df379704844e25 –
@RonMelkhior私はあなたがidとstateの代わりに 'date(timestamp)'でグループ化すると思います – FuzzyTree
idと状態が1日必要ならばDATE(タイムスタンプ)でグループ化します –
w00tを編集してください。ありがとうございます:) –
条件 "と日付(l2.timestamp)=日付(l.timestamp)"は不要です。 –
@AdamSilenko。 。 。質問は1日当たり最後の記録を求めています。これを達成する方法の1つです。 –