mysql过程

mi7gmzs6  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(316)

我一直在为一个慈善机构开发一个应用程序,允许家庭在节日期间注册接受礼物。db组织有多个表。这些表(及其schema/create语句)如下所示:

CREATE TABLE IF NOT EXISTS ValidDates(
  chosenYear YEAR PRIMARY KEY, 
  startDate DATE NOT NULL,
  endDate DATE NOT NULL,
  maxReservationsPerDay INTEGER default 50, 
  CONSTRAINT chkDates CHECK(startDate < endDate)
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS Families(
  fID INTEGER PRIMARY KEY AUTO_INCREMENT,
  signature BLOB DEFAULT NULL,
  reservationDate DATE NOT NULL,
  signatureTS TIMESTAMP,
  createdTS TIMESTAMP NOT NULL,
  createdBy INTEGER,
  FOREIGN KEY (createdBy) REFERENCES Employees(eID) ON DELETE CASCADE
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS FamilyMembers(
  fmID INTEGER PRIMARY KEY AUTO_INCREMENT,
  fName VARCHAR(255) NOT NULL,
  lName VARCHAR(255) NOT NULL,
  age INTEGER NOT NULL,
  sex BIT(1) NOT NULL, 
  ssNum VARCHAR(9) UNIQUE NOT NULL,
  recievedBig BIT(1) DEFAULT 0,
  recievedNormal BIT(1) DEFAULT 0,
  recievedStocking BIT(1) DEFAULT 0,
  famID INTEGER,
  INDEX fIndex (famID), 
  FOREIGN KEY (famID) REFERENCES Families(fID)  ON DELETE CASCADE 
) ENGINE=INNODB;

我想写一个查询(存储过程),将通过并为每个日期,选择日期,在该日期服务的家庭数量,以及在该日期服务的家庭成员总数。例如,应返回2018年12月12日,共有5个保留家庭,其中共有13个家庭成员(身份证1的家庭有5个成员,身份证2的家庭有1个成员,身份证3的家庭有1个成员,身份证4的家庭有4个成员,身份证5的家庭有2个成员)。它应该在所有日期都这样做。谢谢你的帮助。
注意:这些值将被放入c#中的dictionary<datetime,tuple<int,int>>(其中键是日期,第一个int是族数,第二个int是这些族中的成员数)并用于报告功能。

fhity93d

fhity93d1#

这将返回预期结果(不使用 ValidDates 表):

select reservationDate
  ,count(distinct fmID) as #_of_families
  ,count(*) as #_of_familiy_members
from Families as f
join FamilyMembers as fm
  on f.fID = fm.famID
group by reservationDate

相关问题