【问题标题】:How to get a count of data for every date in postgres如何在postgres中获取每个日期的数据计数
【发布时间】:2019-09-12 04:39:33
【问题描述】:

我正在尝试获取数据以填充多线图。表作业具有列 id、created_at 和 partner_id。我想每天显示每个 partner_id 的工作总和。我当前的查询有 2 个问题。 1)它缺少很多工作。 2) 如果那天有一行,它只包含给定日期的条目。我当前的查询是 start 是一个整数,表示我们正在寻找数据的前几天:

SELECT d.date, count(j.id), j.partner_id FROM (
  select to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
  AS date 
  FROM generate_series(0, #{start}, 1) 
  AS offs
) d 
JOIN (
  SELECT jobs.id, jobs.created_at, jobs.partner_id FROM jobs
  WHERE jobs.created_at > now() - INTERVAL '#{start} days'
) j
ON (d.date=to_char(date_trunc('day', j.created_at), 'YYYY-MM-DD'))
GROUP BY d.date, j.partner_id
ORDER BY j.partner_id, d.date;

这会返回如下记录:

[{"date"=>"2019-06-21", "count"=>3, "partner_id"=>"099"},
{"date"=>"2019-06-22", "count"=>1, "partner_id"=>"099"},
{"date"=>"2019-06-21", "count"=>3, "partner_id"=>"075"},
{"date"=>"2019-06-23", "count"=>1, "partner_id"=>"099"}]

我想要的是这样的:

[{"date"=>"2019-06-21", "count"=>3, "partner_id"=>"099"},
{"date"=>"2019-06-22", "count"=>1, "partner_id"=>"099"},
{"date"=>"2019-06-21", "count"=>3, "partner_id"=>"075"},
{"date"=>"2019-06-22", "count"=>0, "partner_id"=>"075"},
{"date"=>"2019-06-23", "count"=>0, "partner_id"=>"075"},
{"date"=>"2019-06-23", "count"=>1, "partner_id"=>"099"}]

这样,在查询中的每一天,即使该计数为 0,我也会为每个合作伙伴输入一个条目。即使计数为 0,我如何调整查询以填充数据?

【问题讨论】:

  • 你需要OUTER JOIN。在你的情况下 - LEFT.
  • @BarbarosÖzhan 为什么?我们需要超出范围的日期吗?
  • 到目前为止,我已经尝试了所有提到的连接,但仍然没有正确提取数据。它丢失了,不仅在它为 0 的地方计数,而且在我可以确认应该有数据的地方也没有拉计数。
  • @PM77-1 抱歉我误会了。

标签: sql postgresql


【解决方案1】:

使用LEFT JOIN。您也不需要这么多子查询,也不需要将日期转换为字符串然后再转换回日期:

SELECT d.date, count(j.id), j.partner_id
FROM (SELECT to_char(dte, 'YYYY-MM-DD') AS date , dte
      FROM generate_series(current_date - {start} * interval '1 day', current_date, interval '1 day') gs(dte)
     ) d LEFT JOIN
     jobs j
     ON DATE_TRUNC('day', j.created_at) = d.dte
GROUP BY d.date, j.partner_id
ORDER BY j.partner_id, d.date;

【讨论】:

  • 我从中得到的输出是:[{"date"=>"2019-09-04", "count"=>0, "partner_id"=>nil}, {"date" =>"2019-09-05", "count"=>0, "partner_id"=>nil}, {"date"=>"2019-09-06", "count"=>0, "partner_id"= >nil}, {"date"=>"2019-09-07", "count"=>0, "partner_id"=>nil}, {"date"=>"2019-09-08", "count" =>0, "partner_id"=>nil}, {"date"=>"2019-09-09", "count"=>0, "partner_id"=>nil}, {"date"=>"2019- 09-10", "count"=>0, "partner_id"=>nil}, {"date"=>"2019-09-11", "count"=>0, "partner_id"=>nil}]
猜你喜欢
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多