【发布时间】: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