基于匹配Postgres中另一个表的列值执行操作

时间:2016-11-11 11:02:54

标签: sql postgresql

我想为postgres数据库写两个查询,但我的技能仍然有点太低,我不太清楚如何做到这一点。 我有三个表,其中包含与访问Web平台和用户编辑相关的数据。 第一个包含平台上每个页面(pageid)的每日访问次数。

Table 1
pageid |    date   | visits
---------------------------
pageid1| 01-01-2016|   2   
pageid1| 02-01-2016|   1   
pageid1| 03-01-2016|   3    
pageid1| 04-01-2016|   4
pageid1| 05-01-2016|   3
pageid1| 06-01-2016|   2
...
pageid1| 01-02-2016|   4
...
pageid2| 01-01-2016|   5
...

第二个包含对每个页面进行的编辑,每天可以有多个编辑(目前该表有时间戳,但我可以轻松地将其转换为日期)。

Table 2
 pageid|    date   | content
-----------------------------
pageid1| 01-01-2016|   a   
pageid1| 01-01-2016|   b   
pageid1| 03-01-2016|   c    
pageid1| 03-01-2016|   c    
pageid1| 03-01-2016|   e    
pageid1| 04-01-2016|   e    
pageid1| 04-01-2016|   c    
pageid1| 05-01-2016|   e    
pageid1| 06-01-2016|   f    
...

第三个表仅包含对页面中某些元素所做的编辑。每页可能有多个元素。

Table 3
 pageid|  page_ref  |    date   | content_ref
---------------------------------------------
pageid1| page_ref_1 | 01-01-2016|   a   
pageid1| page_ref_1 | 03-01-2016|   b   
pageid1| page_ref_2 | 03-01-2016|   c    
pageid1| page_ref_2 | 05-01-2016|   c    
pageid1| page_ref_2 | 06-01-2016|   c    
pageid1| page_ref_3 | 02-01-2016|   c    
pageid1| page_ref_3 | 07-03-2016|   c    
pageid1| page_ref_3 | 03-04-2016|   c    
...

我希望通过我的查询实现:

  1. 对于页面中的每个元素(page_ref),计算每个编辑与上一个编辑之间的页面访问次数的数量。
  2. 对于页面中的每个元素(page_ref),计算每个编辑与上一个编辑之间的页面编辑的数量。
  3. 最后,我希望有一个这样的表:

    Table 4
     pageid|  page_ref  |    date   | content_ref | visit_no | edit_no
    -------------------------------------------------------------------
    pageid1| page_ref_1 | 01-01-2016|   a         |    NA    |    NA
    pageid1| page_ref_1 | 03-01-2016|   b         |     6    |     4
    pageid1| page_ref_2 | 03-01-2016|   c         |    NA    |     NA
    pageid1| page_ref_2 | 05-01-2016|   c         |    10    |     6
    pageid1| page_ref_2 | 06-01-2016|   c         |    5     |     2  
    ...
    

    我希望我的要求很清楚,非常感谢您的帮助:)

0 个答案:

没有答案