左连接子查询,限制返回null

时间:2016-08-03 15:47:51

标签: sql postgresql left-join

我正在尝试创建一个查询,以查看客户第一次订购/购买商品的时间,最后一次以及第一次和最后一次使用哪个渠道(电子邮件,传真,电话......)

我得到了这个SQLFiddle(按预期工作)

http://sqlfiddle.com/#!15/9e947f/17

但在我的服务器上

PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

我在子查询

中添加null时得到limit 1

这是查询

SELECT
  c.customerid,
  least(min(o.date), min(f.date))    AS firstbuydate,
  greatest(max(o.date), max(f.date)) AS lastbuydate,
  sub_max.type                       AS lasttype
FROM customer c
  LEFT JOIN orders o ON o.customerid = c.customerid
  LEFT JOIN invoices f ON f.customerid = c.customerid
  LEFT JOIN (SELECT
               customerid,
               type,
               max(date)
             FROM invoice
             GROUP BY type, customerid
             ORDER BY max(date) DESC
             LIMIT 1
            ) AS sub_max ON (c.customerid = sub_max.customerid)
WHERE c.customerid = 5
GROUP BY c.customerid, sub_max.type;

和输出

customerid  firstbuydate    lastbuydate lasttype
5           2010-11-04      2012-09-26  <null>

没有limit 1我得到明显的

customerid  firstbuydate    lastbuydate lasttype
5           2010-11-04      2012-09-26  EMAI
5           2010-11-04      2012-09-26  PHON

根据要求:

包含和不包含limit 1

的子查询的结果
customerid  type    date
5           EMAI    2012-09-26
5           PHON    2011-12-20

--without

customerid  type    date
5           EMAI    2012-09-26

更新 我现在知道为什么子查询无法工作(我身边有点愚蠢),有没有办法在子查询中引用c.customerid

另一种看起来像是在工作的方式: http://sqlfiddle.com/#!15/c83df/13

0 个答案:

没有答案