2012-04-22 48 views
1

我是一名医院医生,并且试图从OO.org Base提供一份报告,该报告将为我提供每位患者的最近三次血液检查。返回GROUP BY字段中每个值的最新记录?

我有一个包含以下表的数据库: “PAT”(每一个独特的病人的详细信息) “访问”(每个入场的细节,有一个一对多的关系,“拍”) “ bld“(每组血液结果的详细信息,每组都有一个日期(bld.date)和时间(bld.time)字段,与”访问“具有一对多关系)

我的出发点是以下SQL查询:

SELECT * 
FROM "bld" 
INNER JOIN "visit" ON "bld"."visit" = "visit"."id" 
INNER JOIN "pat" ON "visit"."pat" = "pat"."id"; 

它返回每个血液结果以及相关的患者和入院细节。

我处于我刚刚掌握的SQL知识的极限,我非常感谢关于如何仅返回每个入场的三个最新结果的指针。

PS这将是一个巨大的奖励,除了最近的三个结果,我也可以得到第一个结果。

+0

Doc,在这里看到答案:http://stackoverflow.com/a/12102216/165673,应该足以让你开始 – Yarin 2012-08-24 02:42:19

回答

-1

你没有告诉什么SQL数据库您使用的,但我想这将工作

SELECT TOP 3 * 
FROM bld 
INNER JOIN visit ON bld.visit = visit.id 
INNER JOIN pat ON visit.pat" = pat.id 
ORDER BY bld.date desc, bld.time desc 

PS这将是一个巨大的奖金,如果除了我可以在三个最 最近的结果也有第一个结果。

使用“SELECT TOP 1 *”而不是“SELECT TOP 3 *”。

+0

再一次,这只会返回三个最近的结果。我需要针对每位患者的最近三项结果。 – user1350000 2012-04-22 21:13:32

-1

好了,现在我明白你正在尝试做的,试试这个PHP代码:

$query1 = "SELECT id FROM pat"; 

$data1 = mysqli_query($dbc,$query1); 
while($row = mysqli_fetch_array($data1)) { 
    $query2 = "SELECT * FROM `bld` 
    INNER JOIN `visit` ON `bld`.`visit` = `visit`.`id` 
    INNER JOIN `pat` ON `visit`.`pat` = {$row['id']} 
    OREDER BY `bld`.`date` DESC, `bld`.`time` DESC LIMIT 3"; 
    $data2 = mysqli_query($dbc,$query2); 
    while($row = mysqli_fetch_array($data1)) { 
     //code to be executed 
    } 
} 

我会建议您bld.timebld.date合并成一列,并使用timestamp代替。

+0

谢谢,但这只会返回最近的三个结果。我想为每位患者提供最近的三项结果。 – user1350000 2012-04-22 21:08:08

+0

好的,我更正了我的答案。 – 2012-04-23 00:02:01