按平均日期排序(时间戳)

时间:2012-08-15 12:50:19

标签: mysql average

我很感激你对这个的帮助。

我有一个应用程序,用户创建一个由4个朋友组成的团队。应用程序将朋友插入数据库,此表有一个“问题”列和“答案”列,当朋友回答问题时,最后一个列会更新。这个'friend'表还有一个'date_answer'(Timestamp)列,默认值设置为ON UPDATE CURRENT_TIMESTAMP。

一切正常,我现在要做的就是按照团队的平均date_answer订购团队。我的意思是,第一个团队将是用户首先回答问题的团队。

我希望我解释自己好。表格如下:

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

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

可能是Team 1回答如下的情况: 朋友1:凌晨1点 朋友2:凌晨2点 朋友3:3 am 朋友4:3下午

团队2: 朋友1:凌晨1点 朋友2:凌晨4点 朋友3:凌晨1点 朋友4:6 pm

获胜者将是第1队,因为朋友回答得更快。

1 个答案:

答案 0 :(得分:1)

据我了解,这样的事情应该会有所帮助。我已经加入了第三个团队,其中一个团队成员仍在努力回答这个问题....

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;
相关问题