无法获得更换卡

时间:2013-03-22 12:57:35

标签: mysql sql

我被困在这很长时间了。我不知道为什么我替换卡表一直是0。

询问我朋友的帮助,他们告诉我这与加入卡片表有关。

QQn:在特定时期内(以两个特定日期为界),比如2002年12月1日至2003年7月31日,找到在指定时间内至少发出一张EZ链接卡的人。

对于集合中的每个人,列出

(i)所有者NRIC,

(ii)期间签发的卡片总数 期间,

(iii)由卡片更换的卡片总数(截至当前日期) 只有那些在给定时期内发行的卡的所有者。

按照所有者身份的升序列出您的结果。

例如,人S1111111有5张卡C1(2001年1月2日发行),C2(2002年12月11日发行),C3(2003年7月20日发行,作为C1的替代品),C4(7月21日发行) 2003年作为替代C2​​)和C5(2012年8月2日发布,作为C4的替代品)。

我已经解决了部分i和ii但无法解决iii。

这是我的问题:

create table card
(
CardID  int not null primary key,
OwnerNRIC   char(9),
IssuedDcardate  date,
StoredValue decimal (5,2),
OldCardID   int,
constraint card_fk foreign key (OldCardID) references card(CardID)
);


SELECT ownerNRIC AS NRIC,
  COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
  COUNT(OldCardID) AS Total_Replacement_till_date_for_cards_issued_during_Period
FROM card

WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
GROUP BY ownerNRIC;

1 个答案:

答案 0 :(得分:0)

获取此信息的一种方法是使用子查询。子查询按旧卡ID汇总信息,然后将其加入:

select ownerNRIC AS NRIC,
       COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
       NumNewCards
from card c left outer join
     (select oldcardid, count(*) as numNewCards
      from card
      group by oldcardid
     ) oc
     on oc.oldcardId = c.cardid
WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
group by ownerNRIC