2017-10-08 1 views
1

タイムスタンプ列を作成したdbテーブルがあります。現在のタイムスタンプの3日前に作成されたpostgress dbからすべてのレコードを取得したいのですが、別の制約はステータスという別の列です。 PKがタイムスタンプ、ステータス、およびIDであるので、複数のステータスがあり、タイムスタンプが作成される可能性があります。現在のタイムスタンプの3日前に最後に挿入されたIDだけを取得したい。たとえば :タイムスタンプ付きで正確に3日前にデータを取得するようにクエリを選択

-----id------------timestamp--------------------------status------------col3------ 
.....111...............2017-10-05 10:42:23..............A.......... 
.....111...............2017-10-05 12:42:23..............X.......... 
.....111...............2017-10-05 18:42:23..............X.......... 
.....222...............2017-10-05 11:42:23..............A.......... 
.....222...............2017-10-05 13:42:23..............X.......... 

.....222...............2017-10-07 18:42:23..............X.......... 

ID 111は、最後のレコードが正確に3日現在のタイムスタンプが、222の前に挿入されたので、私は、私は最後のエントリがちょうど挿入されたとして、それを選択することがしたいものではありません取得したいものです現在のタイムスタンプの1日前に222の最初のレコードが3日前に挿入されました。改訂された質問については

where created_timestamp < current_timestamp - interval '3 day' 

、それはこのようなものであるように見えるでしょう: は申し訳ありませんが、私はちょうどinterval算術を使用し、ここで

+0

あなたはどのような手段 "を正確に3日前に" 明確にしないでください。私は一番近いマイクロ秒ですか? –

+0

現在のタイムスタンプが2017-10-08 19:42:23の場合、3日前に手段2017-10-05 19:42:23 – user123475

答えて

4

を適切なテーブルを描画することはできませんよ

select id 
from t 
group by id 
having max(timestamp) >= date_trunc('day', current_timestamp - interval '2 day') and 
     max(timestamp) < date_trunc('day', current_timestamp - interval '1 day'); 

これは、 「ちょうど3日前」とは、2つの真夜中が過ぎ去ったことを意味します。ロジックは、他の定義に対して容易に調整することができます。

+0

更新された質問 – user123475

0

t-sqlを使用している場合は、WHEREフェーズで次の述語を使用できます。

DATEDIFF(日、列、SYSDATE)< = 3

関連する問題