我有如下数据:
Name| Place| TS
A| AA| 12/25/2017 0:00
A| AA| 12/31/2017 0:00
A| AA| 1/10/2018 0:00
A| AA| 1/15/2018 0:00
A| AA| 1/31/2018 0:00
A| AA| 2/3/2018 0:00
A| AA| 2/5/2018 0:00
A| AA| 2/7/2018 0:00
A| AA| 2/8/2018 0:00
A| BB| 1/1/2018 0:00
A| BB| 1/22/2018 0:00
A| BB| 2/5/2018 0:00
我需要在这里完成的是计算一个人在某一天内去过一个地方的次数。例如,一个人在7天内访问了4次地点A A,一次地点BB(从今天算起)。我的预期结果如下:
Name Place Last_Week Last_Month
A AA 4 7
A BB 1 2
下面是我目前的情况,但我有一个艰难的时间来总结与条件的计数。请帮忙,谢谢你。
SELECT
Name, Place, COUNT(*)
FROM
SampleTable
GROUP BY
Name, Place, TS
HAVING
TS >= now()::date - 7
ORDER BY
Name, Place;
最佳答案
您可以按名称和位置对数据进行分组,然后计算日期符合您的约束条件的时间
select
name,
place,
sum(case when lw.TS >= now()::date - 7 then 1 else 0 end) last_week,
sum(case when lw.TS >= now()::date - 30 then 1 else 0 end) last_month
from sampleTable st
GROUP BY
Name, Place
order by name, place
关于sql - 有条件的两列内计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48688974/