在一定时期内(以两个特定日期为界),即2002年12月1日至2003年7月31日, 找到在指定时间段内至少发出一张EZ链接卡的人的集合。对于 集合中的每个人,列出(i)所有者身份证,(ii)他/她在此期间发行的卡的总数 期间,以及(iii)由卡提供的卡更换总数(截至当前日期) 只有那些在给定时期内发行的卡的所有者。以升序列出结果 所有者NRIC的顺序。
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 distinct(ownerNRIC) as NRIC,count(*) as Total Crads Issued during Period
From card
Where issuedDate between ‘2002-12-01’ and ‘2003-7-31’ group by ownerNRIC;
答案 0 :(得分:1)
我假设卡替换导致非null的OldCardId。如果OldCardId为NULL,则不更换卡。利用COUNT( expr )忽略 expr 为NULL的行的方式。
SELECT ownerNRIC AS NRIC,
COUNT(*) AS `Total Cards Issued During Period`,
COUNT(OldCardID) AS `Card Replacements During Period`
FROM card
WHERE issuedDate BETWEEN '2002-12-01' AND '2003-7-31'
GROUP BY ownerNRIC;
您错误地使用了DISTINCT。它不是一个函数,无论如何它都是不必要的,因为ownerNRIC是你的GROUP BY列。
所有者仅针对在给定期间内发行的卡片进行的卡片更换总数(截至当前日期)
此要求不明确。你的意思是在给定的时间内发行旧卡,并且新卡是在当前日期之前的任何时间发出的吗?如果是这样,上面的查询就不会给你这个。