我正在尝试编写一个查询,该查询每天返回一天中的数据汇总数据。 例如
| id | user_id | start
|----|---------|------------------------------
| 1 | 1 | 2020-02-01T17:35:37.242+00:00
| 2 | 1 | 2020-02-01T13:25:21.344+00:00
| 3 | 1 | 2020-01-31T16:42:51.344+00:00
| 4 | 1 | 2020-01-30T06:44:55.344+00:00
我希望得到的结果是一个可以传递用户ID和时区或UTC偏移量并退出的函数:
| day | count |
|---------|-------|
| 1/2/20 | 2 |
| 31/1/20 | 1 |
| 30/1/20 | 7 |
计数为每天开始时间在00:00:00.0000到23:59:59.9999之间的所有行-考虑提供的UTC偏移量。
我真的不知道从哪里开始编写这样的查询,而且我什至无法想象从哪里开始,这在我的SQL思考中似乎有很大的差距。我应该如何处理这样的事情?
答案 0 :(得分:1)
您可以使用:
select date_trunc('day', start) as dte, count(*)
from t
where userid = ?
group by date_trunc('day', start)
order by dte;
如果要处理其他偏移量,请将其构建到查询中:
select dte, count(*)
from t cross join lateral
(values (date_trunc('day', start + ? * interval '1 hour'))) v(dte)
where userid = ?
group by v.dte
order by v.dte;