我被困在这里很长一段时间了。我不知道为什么我对牌桌的替换一直是0。
问我的朋友的帮助,他们告诉我,这与加入牌桌有关。
QQn:对于给定的时间段(包括两个给定日期),例如2002年12月1日到2003年7月31日,找出在指定时间段内至少有一张EZ连接卡的人的集合。
对于集合中的每个人,列出
(i)拥有人NRIC,
(ii)该人在该段期间共发出多少张储值卡;
(iii)车主仅就在指定期间内发出的卡更换卡的总次数(截至当前日期)。
按照所有者NRIC的升序列出您的结果。
例如,person S1111111有5张卡C1 (2001年1月2日发行)、C2 (2002年12月11日发行)、C3 (2003年7月20日发行,作为C1的替代品)、C4 (2003年7月21日发行,作为C2的替代品)和C5 (2012年8月2日,作为C4的替代品)。
我已经解决了第一部分和第二部分,但不能解决第三部分。
下面是我的问题:
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;发布于 2013-03-22 21:09:41
获取此信息的一种方法是使用子查询。子查询通过旧的卡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 ownerNRIChttps://stackoverflow.com/questions/15570928
复制相似问题