2012-08-15 119 views
0

我会很感谢您的帮助。按平均日期排序(时间戳)

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

所有工作都很好,我现在要做的是按团队的平均date_answer排序。我的意思是,第一个团队将是用户首先回答问题的那个团队。

我希望我解释一下自己好。这些表如下:

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

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

可以是其中团队1回答这样一个案例: 朋友1:凌晨1时 朋友2:02:00 朋友3:凌晨3点 朋友4:下午3点

和团队2: 朋友1:凌晨1时 朋友2:凌晨4点 朋友3:凌晨1时 朋友4:下午6点

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

+0

请显示确定团队1赢得的计算结果。 – 2012-08-15 13:30:41

回答

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; 
+0

我会测试它。非常感谢你! – Chuy 2012-08-15 18:39:50

+0

它工作完美!谢谢!!! – Chuy 2012-08-16 14:17:35