我害怕另一个新手问题。 我有一个如下数据集:
Ref Expiry
A123456 | 21/05/2014
A123456 |
A123456 |
A123456 | 21/05/2014
A123456 |
B125962 | 21/05/2014
B125962 | 21/05/2014
B125962 | 21/05/2014
B125962 | 21/05/2014
B125962 | 21/05/2014
B125962 | 21/05/2014
B125962 | 21/05/2014
C236772 |
C236772 | 21/05/2014
C236772 |
C236772 |
C236772 |
我想只选择所有行上过期的记录。因此查询应该只返回上面数据集中的B125962。
我尝试了以下内容:
SELECT *
FROM MyTable T
WHERE EXISTS (SELECT 1 FROM MyTable
WHERE Expiry <> ''
AND Ref = T.Ref)
AND NOT EXISTS (SELECT 1 FROM MyTable
WHERE Expiry <> ''
AND Ref = T.Ref)
使用上述内容时,我一直没有得到任何结果。
谢谢!
答案 0 :(得分:0)
SELECT Ref
FROM MyTale
group by Rref
having sum(case when Expiry is null then 1 else 0 end) = 0
如果您按Ref
列进行分组,则可以计算每个组的Expiry
列为空的次数。只选择此计数为0
答案 1 :(得分:0)
您想要返回所有出现的B125962记录吗?如果是这样,这应该有效:
SELECT *
FROM MyTable T
WHERE NOT Ref IN(SELECT Ref FROM MyTable WHERE Expiry = '')
答案 2 :(得分:0)
请尝试以下操作,如果行已过期,则认为expity列只有值,我的意思是我的assumptopm是该列不会有将来的到期日期值。
SELECT Ref, Expiry FROM MyTable WHERE Ref NOT IN(SELECT Ref FROM MyTable WHERE ISNULL(Expiry,'') = '')