我正在尝试创建一个查询,以查看客户第一次订购/购买商品的时间,最后一次以及第一次和最后一次使用哪个渠道(电子邮件,传真,电话......)
我得到了这个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