名前page_last
があいまいだと思います(前のページを意味しますか、それとも訪問の最後のページを意味しますか?)。に変更することをお勧めしますpage_prev
。
訪問中に同じページに複数回アクセスした人がいないと仮定すると、次のようにこれを埋めることができます。
select h.*, hprev.page_url as page_prev
from hits h left outer join
hits hprev
on hprev.page_next = h.page_url and hprev.visit_id = h.visit_id
それが当てはまらない場合は、最新のものが必要です。相関サブクエリを使用してそれを取得できます。
select h.*,
(select h2.page_url
from hits h2
where h2.visit_id = h.visit_id and h2.page_next = h.page_url and
h2.timestamp < h.timestamp
order by timestamp desc
limit 1
) as page_prev
from hits h
更新で更新されたテーブルを直接使用することはできないため、MySQLで更新を行うのは少し注意が必要です。ただし、次のトリックが機能するはずです。
update hits
set page_prev = (select page_url
from (select page_url
from hits h2
where h2.visit_id = hits.visit_id and
h2.page_next = hits.page_url and
h2.timestamp < hits.timestamp
order by timestamp desc
limit 1
) h3
)
MySQLはビューを実体化するため、このトリックは機能します。実際には、更新に必要な情報を含む「一時テーブル」が作成されます。