如何选择日期大于另一行日期的行?

时间:2017-07-07 12:43:45

标签: sql db2

我有一张带有客户卡的桌子。客户可以拥有多张卡。每张客户卡都有一行。如果客户有多张卡,则有几行。有两种不同的卡类型A和B.对于每张卡,存储last_used日期。

我想检查是否有客户同时拥有A B类型的客户卡,其中卡B的last_used日期比卡A的last_used日期更年轻。

这是我的表CUSTOMER_CARDS。

card_id | customer_id | card_type | last_used
----------------------------------------------
      1 |          c1 |         A | 2017-07-07
      2 |          c1 |         B | 2016-04-01
      3 |          c2 |         A | 2017-06-04
      4 |          c2 |         B | 2017-07-03
      5 |          c3 |         A | 2016-02-23
      6 |          c3 |         B | 2017-04-17 

我需要一个select语句来选择customer_id的客户c2,他的B卡类型比他的A卡更年轻。我怎么做到这一点?

3 个答案:

答案 0 :(得分:4)

您需要Group ByHaving子句

select customer_id
from yourtable
Group by customer_id
Having Min(case when card_type = 'B' then last_used end) >  Max(case when card_type = 'A' then last_used end)

答案 1 :(得分:1)

你能尝试这样的事吗?

SELECT A.card_id, A.customer_id, A.card_type, A.last_used 
FROM CUSTOMER_CARDS A
INNER JOIN CUSTOMER_CARDS B ON A.customer_id=B.customer_id
WHERE A.card_type='B'
    AND B.card_type='A' AND A.last_user > B.last_used
    ;

答案 2 :(得分:0)

select d1.cusid,d1.cardtyp,d1.lstusd 
from democat d1 
join democat d2 on d1.cusid = d2.cusid 
where d1.lstusd < d2.lstusd and d1.cardtyp = 'B'