DISTINCT ON仍然给出一个错误,选择项应该在GROUP BY中

时间:2017-12-22 08:06:54

标签: postgresql ember-data

我有一张表格,其中包含客户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

奇怪的是,这仍然给了我同样的错误。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我不是所涉及技术的专家,但我认为您需要创建一个任意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