首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL DML脚本

SQL DML脚本
EN

Stack Overflow用户
提问于 2013-03-21 22:48:26
回答 1查看 286关注 0票数 2

对于给定的时间段(包括两个给定日期),例如2002年12月1日到2003年7月31日,找出在指定时间段内至少有一张EZ连接卡的人的集合。对于集合中的每个人,列出(i)所有者NRIC,(ii)他/她在此期间发行的卡的总数,以及(iii)仅在给定时期内发行的卡的所有者更换卡的总数(截至当前日期)。按照所有者NRIC的升序列出您的结果。

代码语言:javascript
复制
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)
);

上面是我的牌桌。

这是我的尝试,但我迷失了方向。

代码语言:javascript
复制
 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;
EN

回答 1

Stack Overflow用户

发布于 2013-03-21 22:54:16

我假设更换卡会产生一个非空的OldCardId。如果OldCardId为NULL,则这不是卡更换。利用COUNT( expr )忽略expr为NULL的行的方式。

代码语言:javascript
复制
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是您的按列分组。

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

这一要求并不明确。您的意思是旧卡是在指定的时间内发行的,而新卡是在当前日期之前的任何时间发行的?如果是这样的话,上面的查询就不会给你这样的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15550748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档