Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在sql中选择一个属性的最大值小于另一个属性的记录_Mysql_Sql_Sql Server_Sql Server 2008_Database Design - Fatal编程技术网

Mysql 在sql中选择一个属性的最大值小于另一个属性的记录

Mysql 在sql中选择一个属性的最大值小于另一个属性的记录,mysql,sql,sql-server,sql-server-2008,database-design,Mysql,Sql,Sql Server,Sql Server 2008,Database Design,我有一个表,即MyTable,其属性如下: Id PK patientId int 日期时间 检查日期时间 血红蛋白水平浮动 每个体检日期都有一个独特的血红蛋白水平, 一名患者可以有多次输血日期和多次体检日期 这里的“检查日期”是指测量血红蛋白水平的日期 我需要检索记录,以便能够在输血日期之前获得特定患者的血红蛋白水平 请帮助我完成我必须填写的查询。这将为您提供一个或多个myPatId记录,用于您指定的myTransfusionDate之前的检查日期 SELECT checkup_date, h

我有一个表,即MyTable,其属性如下:

Id PK

patientId int

日期时间

检查日期时间

血红蛋白水平浮动

每个体检日期都有一个独特的血红蛋白水平, 一名患者可以有多次输血日期和多次体检日期 这里的“检查日期”是指测量血红蛋白水平的日期

我需要检索记录,以便能够在输血日期之前获得特定患者的血红蛋白水平


请帮助我完成我必须填写的查询。

这将为您提供一个或多个myPatId记录,用于您指定的myTransfusionDate之前的检查日期

SELECT checkup_date, haemoglobin_level
FROM MyTable
WHERE patientId = myPatId AND
    checkup_date = (
        SELECT TOP 1 checkup_date
        FROM MyTable
        WHERE patientId = myPatId AND checkup_date < myTransfusionDate
        ORDER BY checkup_date DESC
    )

您可以发布您目前拥有的代码吗?您希望为单个查询提供单个输血日期,还是为每个有效输血日期提供记录?为每个有效输血日期提供记录。如果输血日期为空,则取最近的血红蛋白水平读数谢谢回复。在你的查询中,myPatId是什么?@Abhi你想为每个患者的每一次治疗记录吗?或者每个病人一份记录?每个病人每次输血的记录。我想要一个病人在输血前的血红蛋白水平,一个病人可以接受多次输血和多次血红蛋白测试。。
declare @PatientId int;

declare @MyTable table (
    Id int primary key,
    patientId int,
    Transfusion_Date datetime,
    checkup_date datetime,
    haemoglobin_level float
);

select *
from @MyTable t
where t.patientId = @PatientId
    and t.checkup_date <= t.Transfusion_Date
    and not exists (
        select 0 from @MyTable t2
        where t2.patientId = t.patientId
            and t2.checkup_date between t.checkup_date and t.Transfusion_Date
    );