使用条件在两列内计数

时间:2018-02-08 15:23:25

标签: sql postgresql

我的数据如下:

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

我需要在这里完成的是计算一个人在某几天内到过一个地方的次数。例如,人A在7天内访问了AA 4次并且将BB放置1次(从今天算起)。我的预期结果应如下所示:

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;

2 个答案:

答案 0 :(得分:4)

您可以按名称和地点对数据进行分组,然后计算约束中日期的适合次数

 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

答案 1 :(得分:2)

最简单的解决方案是使用FILTER:

css("div_id {your code};");

请参阅documentation