我有一个表格,其中包含客户ID列表和日期列表,如下所示:
id |take_list_date | customer_id
1 |2016-02-17 | X00001
2 |2016-02-20 | X00002
3 |2016-02-20 | X00003
我试图以下列格式返回特定日期表中所有ID的计数:
标签:2016-02-20价值:2
以下查询在指定的日期范围内生成所需的结果:
select
count(customer_id)::int as value,
take_list_date::varchar as label
FROM
customer_take_list
where
take_list_date >= '10-12-2017'
and
take_list_date <= '20-12-2017'
GROUP BY
take_list_date
ORDER BY
take_list_date
问题是我必须包含一个ID字段才能使其与Ember Data兼容。当我包含ID字段时,我需要将它添加到Group By子句中,这会产生不正确的结果。
在查看关于其他SO问题的一些建议后,我尝试使用DISTINCT ON解决此问题:
select distinct on
(take_list_date) take_list_date::varchar as label
count(customer_id)::int as value
FROM
customer_take_list
where
take_list_date >= '10-12-2017'
and
take_list_date <= '20-12-2017'
order by
take_list_date
奇怪的是,这仍然给了我同样的错误。我做错了什么?
我不是所涉及技术的专家,但我认为您需要创建一个任意ID而不是使用表中的ID。这里有一个例子:Add Postgres incremental ID。我认为你的最终查询应该是这样的:
SELECT
COUNT(customer_id)::int as value,
take_list_date::varchar as label,
ROW_NUMBER() OVER (ORDER BY take_list_date) AS id
FROM
customer_take_list
where
take_list_date >= '10-12-2017'
and
take_list_date <= '20-12-2017'
GROUP BY
take_list_date
ORDER BY
take_list_date