私は次のようなデータベースを持っています:
person | product | purchase_time
-------+------------+---------------------
jim | football | 2013-02-28 00:01:00
jane | basketball | 2013-02-28 01:01:00
ben | baseball | 2013-02-28 02:02:00
jim | basketball | 2013-02-28 00:01:00
jim | basketball | 2013-02-28 00:03:00
jim | football | 2013-02-28 00:04:00
jane | baseball | 2013-02-28 00:05:00
jane | football | 2013-02-28 00:08:00
jane | basketball | 2013-02-28 01:03:00
ben | baseball | 2013-02-28 03:02:00
「人」が2つの製品を購入した最新の2つの日付の違い(秒単位)を示すレポートを実行する必要があります。
したがって、たとえば、サッカーやバスケットボールを使用する場合は、次のようなことを知る必要があります。
jim | 60
jane | 3180
結果は、ジムの最近のサッカーとバスケットボールの購入が60秒間隔(04:00と03:00)であり、ジェーンのサッカーとバスケットボールの購入が3180秒間隔(08:00と01:03)であったという事実から生じています。 、 それぞれ)。
私はループを使って個人ごとにこれを行うことができます。ここで、次のようなクエリを使用できます。
SELECT a.person,
abs(DATE_PART('epoch', a.purchase_time - b.purchase_time)
FROM
(SELECT *
FROM mytable
WHERE person = 'jim'
AND product = 'football'
ORDER BY purchase_time LIMIT 1) a,
(SELECT *
FROM mytable
WHERE person = 'jim'
AND product = 'basketball'
ORDER BY purchase_time LIMIT 1) b
しかし、すべての人の結果を確認するには、このクエリをループで実行する必要があります。
私はこれを行うためのより賢い方法があると確信しています、そして私はそれが何であるかを知らないだけです。
誰かが何か提案をすることができますか?私はPostgres8.1.23を使用しています。