我有如下数据:

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/

10-13 00:46