在特定日期之前无值查询

时间:2015-03-04 16:19:56

标签: sql database postgresql date exists

我正在接受数据库管理方面的培训,这是我的第一篇文章,所以如果我不按照标准程序发帖,我会道歉。我搜索过,但找不到答案。

在PostgreSQL中,我试图在2014年找到所有新客户订单。但是有些客户可能在2013年或2012年被添加,但直到2014年才订购。所以我试图查询客户的位置2014年1月1日之前没有订单,换句话说,他们的第一个订单是在12/31/2013之后。

我知道这只会显示2014年增加的新客户,我只需要以某种方式抓住之前添加的客户。

SELECT DISTINCT cust_name, COUNT (cust_name)
FROM cohead
JOIN custinfo
ON cust_id=cohead_cust_id
WHERE cust_dateadded >='1/1/2014' AND cust_dateadded <='12/31/2014'
AND cohead_orderdate >='1/1/2014' AND cohead_orderdate <='12/31/2014'
GROUP BY cust_name
ORDER BY cust_name

1 个答案:

答案 0 :(得分:0)

在您发布的查询中,添加DISTINCT毫无意义,因为您已经拥有GROUP BY cust_name

但我建议采用一种完全不同的方法,这种方法可能更快 这将检索2014年首次订购的所有客户 - 无论何时将其添加到custinfo表中:

SELECT *
FROM   custinfo cu
WHERE  EXISTS (  -- with order in 2014
   SELECT 1 FROM cohead
   WHERE  cohead_cust_id = cu.cust_id  -- guessing
   AND    cohead_orderdate BETWEEN '2014-01-01' AND '2014-12-31'
   )
AND    NOT EXISTS (  -- but no order before 2014
   SELECT 1 FROM cohead
   WHERE  cohead_cust_id = cu.cust_id
   AND    cohead_orderdate < '2014-01-01'  -- assuming a date column
   );

对于大表,请确保索引支持此查询。