0
从表面上看,这似乎是一个简单的where子句,但考虑到以下数据,我只希望我的查询返回帐户B的销售交易,并声明只显示那些没有2015年以上销售日期的帐户。如何编写只返回销售日期少于今天的帐户的查询?
Acct Sale Date
A 2030
A 2018
A 2015
B 2015
B 2014
B 2013
C 2020
C 2015
C 2012
从表面上看,这似乎是一个简单的where子句,但考虑到以下数据,我只希望我的查询返回帐户B的销售交易,并声明只显示那些没有2015年以上销售日期的帐户。如何编写只返回销售日期少于今天的帐户的查询?
Acct Sale Date
A 2030
A 2018
A 2015
B 2015
B 2014
B 2013
C 2020
C 2015
C 2012
做一个GROUP BY
。使用HAVING
只与最后SaleDate <返回ACCT的= 2015:
select acct
from tablename
group by acct
having max(SaleDate) <= 2015
如果希望所有列,所有行,这些帐户:
select t.*
from tablename t
join (select acct, max(SaleDate) as maxSaleDate
from tablename
group by acct) t2
on t.acct = t2.acct
where t2.maxSaleDate <= 2015
如果在您的结果需要每一笔交易,你可以使用NOT EXISTS
:
SELECT *
FROM YourTable as T
WHERE NOT EXISTS(SELECT 1 FROM YourTable
WHERE SaleDate >= 2015
AND Acct = T.Acct);
有没有办法结合有和在哪里?例如:从acct中选择acct from acct having min(saledate)> = 2015 where acct in('A','B'); – Tony
是的,在执行GROUP BY和HAVING之前,可以使用WHERE过滤掉行。在GROUP BY子句之前放置WHERE。 – jarlh