私はテーブルを持っている:すべてのsid
は、指定されたtimestamp
でいくつかのtype
とstatus
に到達したときに記録PostgreSQLの - 最新かつ特定のレコードの取得数
select sid, type, status, timestamp from contact_history limit 10;
sid | type | status | timestamp
---------+------+--------+-------------------------------
6291179 | 0 | 1025 | 2015-08-24 13:05:22.501025+02
68737 | 0 | 5 | 2015-08-24 13:05:32.500005+02
4987391 | 0 | 65 | 2015-08-24 13:05:35.500065+02
1189551 | 1 | 65 | 2015-08-24 13:06:05.510065+02
3374714 | 1 | 5 | 2015-07-27 13:25:25.510005+02
2297221 | 0 | 5 | 2015-07-27 13:25:48.500005+02
5503230 | 2 | 65 | 2015-07-27 13:25:50.520065+02
596992 | 1 | 65 | 2015-07-27 13:26:51.510065+02
5215455 | 0 | 1025 | 2015-07-27 13:27:21.501025+02
3011248 | 0 | 5 | 2015-07-27 13:27:46.500005+02
(10 rows)
\d contact_history
Table "contact_history"
Column | Type | Modifiers
---------------+--------------------------+----------------------------------------------------------
sid | character varying(32) | not null
type | integer | not null
status | integer | not null
timestamp | timestamp with time zone | not null
id | bigint | not null default nextval('contact_history_id_seq'::regcla
Indexes:
"contact_history_pk" PRIMARY KEY, btree (id)
"contact_history_sid_timestamp_idx" btree (sid, "timestamp")
。一意の行はありません。 sid
はいつでもランダムにtype
とstatus
をランダムに並べ替えることができます。 20万の行があります。 PostgreSQLのバージョンは9.3.13です
今度はsid
がどれくらいあるか知りたいのですが、に今すぐ - >max(timestamp)
があります。言い換えれば、sid
の場合は、最後にtimestamp
と対応するtype
とstatus
を見つけて、条件が(type='0' or type='1') and status='5'
であるものを数えます。だから私は出力として1つの数字を期待しています。他のより効率的なアプローチと同じ結果を歓迎します。ありがとうございました。
'...条件に合致するものを数えます。なぜあなたは最新のもの(sid単位)のみを必要とするのですか? – joop
@joop説明しようとする可能性のあるステップ:1)テーブル 'sid、last_timestamp'を生成する2)テーブル' sid、last_timestamp、last_type、last_status'を生成する3)フィルタ条件4) – lojza