2017-08-26 53 views
0

我建立了下面的SQL查询油滑与子查询

SELECT 
v.uuid, d.start_time, d.end_time 
FROM 
visits v 
    INNER JOIN 
    visit_dates d ON v.uuid = d.visit_uuid 
WHERE 
v.study_environment_site_uuid = (SELECT 
    study_environment_site_uuid 
    FROM 
    visits 
    WHERE 
    uuid = 'e4663612-39f9-4c43-bd86-c4c5a9235b03') 
AND v.uuid != 'e4663612-39f9-4c43-bd86-c4c5a9235b03' 
AND d.start_time < (SELECT start_time FROM visit_dates WHERE visit_uuid = 'e4663612-39f9-4c43-bd86-c4c5a9235b03' ORDER BY start_time LIMIT 1) 
ORDER BY d.start_time; 

现在要反映到油滑

(for { 
    vSes <- visits.filter(_.uuid === uuid) 
    vDate <- visitDates.filter(_.visitUuid === uuid).sortBy(_.startTime).take(1) 
    (v, d) <- visits join visitDates on (_.uuid === _.visitUuid) 
    if (v.uuid =!= uuid && v.studyEnvironmentSiteUuid === vSes.studyEnvironmentSiteUuid && d.startTime < vDate.startTime) 
} yield (v.uuid)).result.map(_.headOption) 

加入,但由此产生错误的结果。我使用的油滑3.2.1 下面的SQL生成

SELECT 
    x2.`uuid`, 
    x7.start_time 
FROM 
    `visits` x3, 
    (SELECT 
     `visit_uuid` AS x4, `start_time` AS x5 
    FROM 
     `visit_dates` 
    WHERE 
     `visit_uuid` = ? 
    ORDER BY `start_time` 
    LIMIT 1) x6, 
    `visits` x2, 
    `visit_dates` x7 
WHERE 
    ((x2.`uuid` = x7.`visit_uuid`) 
     AND ((NOT (x2.`uuid` = ?)) 
     AND (x7.`start_time` < x6.x5))) 
     AND ((x3.`uuid` = ?) 
     AND (x2.`study_environment_site_uuid` = x3.`study_environment_site_uuid`)); 

生成的查询是不是加入,返回多行,而不是一个人工查询产生。

任何想法/指针?

回答

0

由于现在还没有答案,我会后我的解决方法问题

for { 
    (v, d) <- visits join visitDates on (_.uuid === _.visitUuid) 
    vSes <- visits.filter(_.uuid === uuid) 
    vDate <- visitDates.filter(_.visitUuid === uuid).sortBy(_.startTime).take(1) 
    if v.uuid =!= uuid && v.studyEnvironmentSiteUuid === vSes.studyEnvironmentSiteUuid && d.startTime < vDate.startTime 
} yield (v.uuid, d.startTime)).result.map { 
    case [email protected](_ +: _) => Some(results.maxBy(_._2)._1) 
    case _ => None 
}