首页 > 解决方案 > 在postgresql中传播每个人在每个特定日期的天数和重复次数

问题描述

我在 postgresql 数据库中有这张表

id      name     time
1       poi      2018-05-13 08:45:48.846887
2       poi      2018-05-13 08:11:04.671437
3       roik     2018-05-14 16:32:04.671437
4       ceil     2018-05-14 17:38:04.671437
5       verk     2018-05-14 19:46:04.671437
6       roik     2018-05-16 08:21:04.671437
7       poi      2018-05-16 11:00:04.671437
8       roik     2018-05-18 14:40:08.671437
9       roik     2018-05-18 17:21:09.671664
10      verk     2018-05-13 08:46:04.671437
11      sant     ...
12      sant      ...
13      dmk       ...
14      roik      ...
15      poi       ...
...     ....     ...

我想要这样一张桌子:

name 2018-5-1 2018-5-2 2018-5-3 2018-5-4 2018-5-5 2018-5-6 2018-5-7 2018-5-8 2018-5-9 2018-5-10 2018-5-11 2018-5-12 2018-5-13 2018-5-14 ...
poi  0        3         3         7
roik 0        4         2         1
verk 0        2         0         9
sant 1        0         8         2
dmk  0        3         ...
...

这些数字代表每个人在每一天的重复次数我该怎么做?提前谢谢你

标签: postgresql

解决方案


这不完全是您想要的,但非常相似。您只需要将“日期”列值转换为列本身,但您可以在查询所需日期后在客户端轻松完成。

https://www.db-fiddle.com/f/7r4AG9MV9zeZEjoU77fCfk/2

SELECT Test.name, SUM(CASE WHEN date(Test.time) = dates.date THEN 1 ELSE 0 END), dates.date FROM Test CROSS JOIN
(SELECT DISTINCT(date(time)) as date FROM Test) as dates
GROUP BY Test.name, dates.date

推荐阅读