我想从订阅表中计算特定用户的月数。例如,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
答案 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