我在这里找不到处理我的问题类型的回复,但是如果我有事先道歉。
我有两张桌子:客户&订单。
我需要能够选择2015年至少有一个订单但2016年没有订单的所有客户。
我可以通过
获得2015年订单的任何客户SELECT *
FROM clients AS t1
LEFT
JOIN orders AS t2
ON t2.clientid=t1.clientid
WHERE t2.orderdate>='2015-01-01'
AND t2.orderdate<='2015-12-31'
GROUP
BY t1.clientid
但我怎样才能改变这一点,以便消除2016年也有订单的客户?
感谢
答案 0 :(得分:1)
您可以在2016年使用不包含客户ID的子选项
SELECT *
FROM clients AS t1
INNER
JOIN orders AS t2
ON t2.clientid=t1.clientid
WHERE t2.orderdate>='2015-01-01'
AND t2.orderdate<='2016-12-31'
AND t1.clientid not in (select clientid from
orders
where orderdate>='2016-01-01' AND orderdate<='2016-12-31' )
你正在使用group by without aggreation函数(最终你应该使用distinct with explict column name)
答案 1 :(得分:0)
我建议使用NOT IN在2016年过滤订单客户。我也会使用YEAR函数:
SELECT *
FROM clients AS t1
INNER JOIN orders AS t2
ON t2.clientid=t1.clientid
WHERE YEAR(t2.orderdate)=2015
AND t1.clientid NOT IN (
SELECT clientid FROM orders sub
WHERE YEAR(sub.orderdate)=2016
)