2014-11-21 24 views
0

我有一个MySQL表像获取从表中的下一个最大的时间,一组输入

Name | age |  time 
------+------+--------- 
x  | 23 | 21:00:01 
y  | 67 | 23:34:43 
z  | 90 | 12:45:34 
a  | 45 | 21:10:10 
b  | 3 | 23:45:00 

现在我需要找到具有时间只比给定的输入大的输入姓名和年龄。

说我有一个输入21:00:01然后输出将是21:10:10。我可以写这个查询,但我有一个巨大的输入列表,每次我无法对每个输入日期执行查询。

我需要的是一个查询,它将输入列表作为输入,并将每个输入的下一个大时间返回给我。我在这里停留的任何解决方案,请

我试图得到这样的输出时,有一个where子句像时间(“二十一点00分01秒”,...)

Name | age |  time | nexttime | nextname | 
------+------+-----------+---------------+--------------- 
x  | 23 | 21:00:01 | 21:10:10  | a 
y  | 67 | 23:34:43 | 23:45:00  | b 
z  | 90 | 12:45:34 | 21:00:01  | x 
a  | 45 | 21:10:10 | 23:34:43  | y 
b  | 3 | 23:45:00 |    | 

回答

1

认沽输入表格,例如InputTimes。然后,你可以这样做,因为相关子查询:

select it.*, 
     (select name 
     from table t 
     where t.time > it.time -- removed = 
     order by t.time 
     limit 1 
     ) as name, 
     (select age 
     from table t 
     where t.time > it.time -- removed = 
     order by t.time 
     limit 1 
     ) as age 
from InputTimes it; 
0

您是否正在寻找一种方式来获得这样的结果?

Name | age |  time | nexttime | nextname | 
------+------+-----------+---------------+--------------- 
x  | 23 | 21:00:01 | 21:10:10  | a 
y  | 67 | 23:34:43 | 23:45:00  | b 
z  | 90 | 12:45:34 | 21:00:01  | x 
a  | 45 | 21:10:10 | 23:34:43  | y 
b  | 3 | 23:45:00 |    | 

可以通过

select 
t.name, 
t.age, 
t.time, 
(select top 1 t2.time from myTable t2 where t2.time > t.time order by t2.time) as nexttime, 
(select top 1 t2.name from myTable t2 where t2.time > t.time order by t2.time) as nextname 
from myTable t 
+0

日Thnx奥勒来完成,我需要与上面相同。 – 2014-11-22 04:46:52

+0

用SQL语句发布更新 – OlleR 2014-11-25 13:36:13

+0

哦,刚才看到前面的文章刚刚给出了答案:) – OlleR 2014-11-25 13:37:26

相关问题