mysql - 无法换卡

标签 mysql sql

我被困在这个问题上很长时间了。不知道为什么我替换的卡表一直都是0。

请教了 friend ,他们说是加入牌 table 的事情。

QQn:对于给定时间段(包括两个给定日期),例如 2002 年 12 月 1 日至 2003 年 7 月 31 日,找到在指定时间段内至少拥有一张 EZ link 卡的人的集合。

对于集合中的每个人,列出

(i) 所有者身份证,

(ii) 他/她在这期间发行的卡的总数 期间,

(iii) 已更换的卡片总数(截至当前日期) 只有在给定期间发行的那些卡的所有者。

按照所有者身份证的升序列出您的结果。

例如,S1111111 有 5 张牌 C1(2001 年 1 月 2 日发行)、C2(2002 年 12 月 11 日发行)、C3(2003 年 7 月 20 日发行以替代 C1)、C4(7 月 21 日发行) 2003 作为 C2 的替代品)和 C5(2012 年 8 月 2 日发布作为 C4 的替代品)。

我已经解决了第一部分和第二部分,但无法解决第三部分。

这是我的查询:

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 ownerNRIC AS NRIC,
  COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
  COUNT(OldCardID) AS Total_Replacement_till_date_for_cards_issued_during_Period
FROM card

WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
GROUP BY ownerNRIC;

最佳答案

获取此信息的一种方法是使用子查询。子查询根据旧卡号汇总信息,然后加入:

select ownerNRIC AS NRIC,
       COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
       NumNewCards
from card c left outer join
     (select oldcardid, count(*) as numNewCards
      from card
      group by oldcardid
     ) oc
     on oc.oldcardId = c.cardid
WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
group by ownerNRIC

关于mysql - 无法换卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570928/

相关文章:

mysql - 如何在 MySql 中转义撇号(')?

mysql - 如果字符串中存在某个字符,则SQL取下最后一个字符

mysql - 数据库架构 - 可配置字段?

java - 字符串 -> java.util.Date -> java.sql.Date(带时间戳)

sql - 如何处理 MySQL 函数 md5 的输入?

PHP 未将 MySQL 写入 CSV

mysql - 重命名mysql中的表数据字段

mysql - 如何在选择查询中使用 case 语句设置值?

MySQL修剪(连接...)

mysql - SQL:按Column2降序选行,Column1不为NULL时只显示1条结果