SQL DML脚本

时间:2013-03-21 14:48:26

标签: mysql sql

在一定时期内(以两个特定日期为界),即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;

1 个答案:

答案 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列。

  

所有者仅针对在给定期间内发行的卡片进行的卡片更换总数(截至当前日期)

此要求不明确。你的意思是在给定的时间内发行旧卡,并且新卡是在当前日期之前的任何时间发出的吗?如果是这样,上面的查询就不会给你这个。