0

これであなたの助けをいただければ幸いです。

ユーザーが4人の友達のチームを作成するアプリがあります。アプリは友達をデータベースに挿入します。このテーブルには「質問」列と「回答」列があり、最後の列は友達が質問に回答したときに更新されます。この「friend」テーブルには「date_answer」(タイムスタンプ)列もあり、デフォルト値はONUPDATECURRENT_TIMESTAMPに設定されています。

すべてが正常に機能しています。私が今しなければならないことは、チームの平均date_answerでチームを注文することです。つまり、最初のチームは、ユーザーが最初に質問に答えたチームになります。

私は自分自身を大丈夫と説明したと思います。表は次のとおりです。

Teams
------
id
name
created
*******

Friends
-------
id
name
team_id
question
answer
date_answer

チーム1が次のように答えた場合があります:友達1:午前1時友達2:午前2時友達3:午前3時友達4:午後3時

チーム2:友達1:午前1時友達2:午前4時友達3:午前1時友達4:午後6時

友達の方が早く答えたので、勝者はチーム1になります。

4

1 に答える 1

1

私が理解しているように、このようなものが役立つはずです。チームの1人のメンバーがまだ質問に答えるのに苦労している3番目のチームを含めました...

create table Teams
(
id int unsigned not null auto_increment primary key,
name varchar(50) not null,
created datetime not null
);

create table Friends
(
id int unsigned not null auto_increment primary key,
name varchar(50) not null,
team_id int unsigned not null,
question varchar(100) default null,
answer varchar(100) default null,
date_answer timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

insert into Teams (name,created) values ("Team 1",now());
insert into Teams (name,created) values ("Team 2",now());
insert into Teams (name,created) values ("Team 3",now());


insert into Friends (name,team_id,question,answer,date_answer) values ("Bob",1,"What Is Your Name?","Bob",'2012-08-15 01:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Joe",1,"What Is Your Name?","Joe",'2012-08-15 02:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Tim",1,"What Is Your Name?","Tim",'2012-08-15 03:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Tom",1,"What Is Your Name?","Tom",'2012-08-15 15:00:00');

insert into Friends (name,team_id,question,answer,date_answer) values ("Jon",2,"What Is Your Name?","Jon",'2012-08-15 01:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Jim",2,"What Is Your Name?","Jim",'2012-08-15 04:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Josh",2,"What Is Your Name?","Josh",'2012-08-15 01:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Jack",2,"What Is Your Name?","Jack",'2012-08-15 18:00:00');

insert into Friends (name,team_id,question,answer,date_answer) values ("Dave",3,"What Is Your Name?","Jon",'2012-08-15 01:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Dug",3,"What Is Your Name?","Jim",'2012-08-15 04:00:00');
insert into Friends (name,team_id,question,answer,date_answer) values ("Dappy",3,"What Is Your Name?",null,null);

-- Winning team must have an answer from all teams members and have earliest average 
-- date_answer
select t.name as "Winning Team",
sum(case when f.answer is not null then 1 else 0 end) as answerCount,
count(*) as teamCount,
timestamp(avg(f.date_answer)) as averageAnswerDate
from Teams t
left join Friends f on f.team_id = t.id
group by t.name
having answerCount = teamCount
order by averageAnswerDate asc
limit 1;
于 2012-08-15T13:38:52.503 に答える