在其他值之前选择列的最大值

时间:2018-07-10 18:10:16

标签: mysql sql database

假装我将此表保存在名为“ Relocations”的MySQL数据库上,该数据库可跟踪约会中用户的所有重定位:

UserId AppointmentTypeId  History   Location   Time
------------------------------------------------------
[ 1    1                  1        'Room A'   13:00 ]
  1    1                  2        'Room B'   13:01
[ 1    1                  3        'Room A'   13:02 ]
  1    1                  4        'Room C'   13:03
  1    1                  5        'Room D'   13:05
[ 1    1                  6        'Room A'   13:09 ]
  2    1                  1        'Room A'   13:00
[ 2    1                  2        'Room A'   13:05 ]
  2    1                  3        'Room B'   13:10

我需要获取Location ='Room A'的所有行,但只有下一行是Location!='Room A'的行以及UserId和AppointmentTypeId相同。

所以我将从该表中获得方括号内的行。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您有一个方便的history列,因此请使用left join

select r.*
from relocations r left join
     relocations rnext
     on rnext.userid = r.userid and rnext.AppointmentTypeId = r.AppointmentTypeId and
        rnext.history = r.history + 1
where r.Location = 'Room A' and
      (rnext.Location <> 'Room A' or rnext.Location is null);