Postgres基于user_id计算月份

时间:2016-05-26 07:27:17

标签: postgresql

我想从订阅表中计算特定用户的月数。例如,user_id = 1在订阅表中出现10次,就像1月它出现2次,2月= 0再次出现在march = 1那样

user_id   type      started_on  ended_on
 2       P          2009-10-21  2010-03-18  
 2       F          2010-03-18  2010-03-20
 2       P          2010-03-20  2012-05-19
 2       F          2012-05-19  till now

1 个答案:

答案 0 :(得分:1)

这是非常基本的SQL,我建议你在这里提问之前阅读一些manual。例如,关于Aggregate functions。但是你去了:

如果您想要一位用户:

SELECT 
      count(distinct month)
  FROM 
      subscription 
 WHERE 
      user_id=your_user_id_number 

如果你想要每个用户:

SELECT 
      count(distinct month),
      user_id
  FROM 
      subscription 
 GROUP BY 
      user_id

编辑: 好的,所以你想要两个日期列之间的月份差异,这里是你如何使用age():

SELECT user_id, extract(YEAR from age(coalesce(ended_on,current_date),started_on)) * 12 + extract(MONTH FROM age(coalesce(ended_on,current_date),started_on)) 
FROM subscription