sql - 在有条件的两列内计数

标签 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;

最佳答案

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

 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/

相关文章:

postgresql - ogr2ogr 和 Postgis/PostgreSQL 数据库的编码问题

mysql - sql中的blob数据类型与spring中的blob数据类型相同

php - 在 PostgreSQL 中获取生日为今天的所有条目

PostgreSQL : comparing two sets of results does not work

python - 为了解决经度/纬度 SQL 查询,我从 PHP 复制到了新的 Python 后端。需要一些第二意见

java - 如何使用java创建postgres数据库的备份

spring - 如何最好地处理 Spring JDBC 中的约束冲突

sql - 在SQL中减去前一行减去当前行

sql - 从 SQL Server 中删除大量行 - 以高效且非锁定的方式

mysql中使用正则表达式进行mysql查询