繁体   English   中英

获取每天创建的条目的数量

Get count of created entries for each day

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我有一个这样的搜索查询:

SELECT COUNT(id), date(created_at)
FROM entries
WHERE date(created_at) >= date(current_date - interval '1 week')
GROUP BY date(created_at)

如你所知,例如我得到一个像这样的结果:

count | date
  2   |  15.01.2014
  1   |  13.01.2014
  9   |  09.01.2014

但我没有得到一周没有创建条目的日子。

如何获得看起来像这样的搜索结果, 包括没有创建条目的日期?

count | date
  2   |  15.01.2014
  0   |  14.01.2014
  1   |  13.01.2014
  0   |  12.01.2014
  0   |  11.01.2014
  0   |  10.01.2014
  9   |  09.01.2014
4 个回复
SELECT day, COALESCE(ct, 0) AS ct
FROM  (SELECT now()::date - d AS day FROM generate_series (0, 6) d) d  -- 6, not 7
LEFT   JOIN (
   SELECT created_at::date AS day, count(*) AS ct 
   FROM   entries
   WHERE  created_at >= date_trunc('day', now()) - interval '6d'
   GROUP  BY 1
   ) e USING (day);
  • WHERE条件使用sargable表达式,因此Postgres可以在created_at上使用普通索引。 对性能而言比其他所有人都重要得多。

  • 为了覆盖一周(包括今天),从“今天”开始减去6天,而不是7天。

  • 假设id被定义为NOT NULLcount(*) count(id)在这里与count(id)相同,但稍快一些。

  • CTE在这里会有点矫枉过正。 它更慢,更冗长。

  • 首先聚合,稍后加入。 在这种情况下,这更快。

  • now()是标准SQL CURRENT_TIMESTAMP的稍微更短和更快的Postgres实现(您也可以使用它)。

这应该是最短和最快的查询。 使用EXPLAIN ANALYZE测试。

有关:

试试这个查询:

with a as (select current_date - n as dt from generate_series(0, 6) as t(n)),
     b as (select count(id) cnt, date(created_at) created_at
           from entries
           where date(created_at) >= date(current_date - interval '1 week')
           group by date(created_at))
select coalesce(b.cnt,0), a.dt
from a
left join b on (a.dt = b.created_at)
order by a.dt;

count函数不会为不存在的行生成0。 所以你必须填写缺少日期的行。 使用generate_series和简单的日期算法,您可以为某段时间的日期生成行(在本例中为1周)。 然后,您可以通过外连接生成最终结果。 coalescenull替换为0

您需要告诉SQL处理NULL。 如果为NULL返回0

你可以通过COALESCE来做到这一点

http://www.postgresql.org/docs/devel/static/functions-conditional.html

使用generate_series()创建所需的日期并加入此日期列表:

SELECT  COUNT(id), 
    date(gdate)
FROM entries
    RIGHT JOIN generate_series(current_date - interval '1 week', current_date, '1 day') g(gdate) 
    ON date(created_at) = date(gdate) AND date(created_at) >= date(current_date - interval '1 week')
GROUP BY 
    date(gdate)
ORDER BY
    date(gdate) DESC;
2 如何每天获取count()

我正在使用分析功能,因此我希望获得每天的计数,并且一天中没有计数时,它将返回0。 我正在使用MYSQL。 这是我的查询: 我收到了查询以获取31天的日期,但我无法获取每一天的count()。 例: 我有一个包含以下各列的发货表: id =一些id ...

2018-01-26 04:21:51 2 61   mysql
3 每天计算新条目

我想每天计算新的ID。 说新,我的意思是相对于前一天的新。 假设我们有一张表: 日期 ID 2021-01-01 1 2021-01-02 4 ...

2021-06-10 19:55:26 3 33   sql/ hive
4 每天为每个客户获取一个运行计数

我有一张桌子: 我需要计算每个客户的累计天数。 在这种情况下,我需要获取下表: 我尝试了这个,我得到了严格的解决方案: 但这是最好的方法吗? 为每个客户创建一个列表然后取消列出该列表? 另外,因为我没有指定日期字段,所以我只是订购数据。 ...

5 获取每天的活跃用户数

我有一个数据,可以让用户了解用户何时在城市订阅服务,服务何时到期。 如下 我想要指定日期的每个城市每天的活跃用户数 输出应类似于 我显示的输出仅适用于城市LA并且我还希望表中的每个城市都具有相似的输出。 我的输出说明 在City = LA , Day ...

7 如何获取每天 CSV 日志条目的计数

如果我有一个类似于以下内容的 CSV 文件: 什么是获得每天条目数的数据结构的好方法,以便我得到: [{:date "2016-07-25" :count 5}...] 我正在读取一个 csv 文件并使用 clojure.data.json/write-str 将天数作为 JSON 返回, ...

2020-04-01 07:18:00 1 74   clojure
10 仅获得每天多个条目中的最后一行

我陷入了试图在查询中整理一天中最后一个条目的问题,每个实体我都会得到24行。 我已经在这篇文章中阅读了与解决方案非常相似的问题,但是我无法将其合并到现有查询中。 我现有的查询: 由此产生的结果例如是: 我想要达到的结果是: 从@levelonehuman反馈后更改 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM