我被困在这个问题上很长时间了。不知道为什么我替换的卡表一直都是0。
请教了 friend ,他们说是加入牌 table 的事情。
QQn:对于给定时间段(包括两个给定日期),例如 2002 年 12 月 1 日至 2003 年 7 月 31 日,找到在指定时间段内至少拥有一张 EZ link 卡的人的集合。
对于集合中的每个人,列出
(i) 所有者身份证,
(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 的替代品)。
我已经解决了第一部分和第二部分,但无法解决第三部分。
这是我的查询:
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;
最佳答案
获取此信息的一种方法是使用子查询。子查询根据旧卡号汇总信息,然后加入:
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
关于mysql - 无法换卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570928/