对于给定的时间段(包括两个给定日期),例如2002年12月1日到2003年7月31日,找出在指定时间段内至少有一张EZ连接卡的人的集合。对于集合中的每个人,列出(i)所有者NRIC,(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;发布于 2013-03-21 22:54:16
我假设更换卡会产生一个非空的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是您的按列分组。
所有者仅为在给定时间段内发行的卡进行的卡更换总数(截至当前日期)
这一要求并不明确。您的意思是旧卡是在指定的时间内发行的,而新卡是在当前日期之前的任何时间发行的?如果是这样的话,上面的查询就不会给你这样的结果。
https://stackoverflow.com/questions/15550748
复制相似问题