把mysql查询放在一起

时间:2013-06-13 23:43:15

标签: mysql

涉及两个表:

第一个包含以下格式的表格(表格:stimuli_schedule)

id      left_side     right_side     start_datetime
1       LS1           LS2            2013-05-14 12:00:00
2       LS2           LS1            2013-05-15 11:44:00

数据是指引入left_side right_side项目的日期时间。对于2013-05-14 12:00:00至2013-05-15 11:44:00,第一个计划记录处于活动状态。

第二个包括活动记录(表exp8):

id     bee_id    date_time            choice    landing_duration
1      Green12   2013-05-14 15:35:31  right     5

我需要找出两件事:(1)活动时在左侧和右侧显示的内容,以及(2)实际选择的内容。

这就是我所拥有的不能产生我需要的东西:

select * 
  from exp8 
  where exists (
    select left_side
    from stimuli_schedule
      where exp8.date_time < stimuli_schedule.start_datetime 
      order by stimuli_schedule.start_datetime asc
      limit 1) 

提前致谢!

1 个答案:

答案 0 :(得分:0)

这个怎么样?

SELECT e.*, ss2.left_side, ss2.right_side, ss2.start_datetime
FROM exp8 e
LEFT JOIN stimuli_schedule ss ON ss.start_datetime <= e.date_time
LEFT JOIN stimuli_schedule ss2 ON ss2.start_datetime <= e.date_time
GROUP BY e.id, ss2.id
HAVING ss2.start_datetime = MAX(ss.start_datetime) OR ss2.start_datetime IS NULL;

我们必须加入stimuli_schedule两次,一次获得正确的日期,然后再次获得匹配的完整行。

sqlfiddle在这里:http://sqlfiddle.com/#!2/271b0a/4