Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL DML脚本_Mysql_Sql - Fatal编程技术网

Mysql SQL DML脚本

Mysql SQL DML脚本,mysql,sql,Mysql,Sql,在某一特定时期内(包括两个特定日期),如2002年12月1日至2003年7月31日, 查找在指定时间段内至少发行了一张EZ-link卡的人员集。对于 集合中的每个人,列出(i)所有者NRIC,(ii)其在活动期间发行的卡的总数 期间,以及(iii)客户更换卡的总次数(截至当前日期) 只有在给定期间发行的卡的所有者。以升序形式列出您的结果 所有者NRIC的命令 create table card ( CardID int not null primary key, OwnerNRIC cha

在某一特定时期内(包括两个特定日期),如2002年12月1日至2003年7月31日, 查找在指定时间段内至少发行了一张EZ-link卡的人员集。对于 集合中的每个人,列出(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;

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

您错误地使用了DISTINCT。它不是一个函数,而且也没有必要,因为Ownernic是按列分组的

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


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

Hi,在这段时间内,作为卡片替换,我的行计数(OldCardID)仍然有语法错误。SQL非常难用,需要大量的脑力劳动。例如,S1111111有5张卡C1(2001年1月2日发行)、C2(2002年12月11日发行)、C3(2003年7月20日发行以代替C1)、C4(2003年7月21日发行以代替C2)和C5(2012年8月2日发行以代替C4)。我无法理解它在问什么。我修复了上面示例查询中缺少的逗号,对于导致语法错误的错误表示抱歉。我需要离开一段时间,稍后我会考虑你的其他评论。
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;