我需要帮助过滤查询返回的结果行。我有一个疾病表,其中百分比,疾病,日期。
SELECT I.percent, I.illness, I.date
FROM Illnesses I
INNER JOIN Person P on I.person_id = P.id // an inner join I use in where clause
WHERE P.id = someId // 13 let's say
所以在我的情况下,对于id = 13的人,查询'将返回
51, someIllness, 2015-12-07
43,someOtherIllness, 2015-12-08
null, anotherIllness, 2015-12-08
我需要选择日期最近的行,如果有多个行具有该日期,则需要选择最高百分比。我在where子句
中添加了以下代码AND I.date = (SELECT max(I2.date)
FROM Illnesess I2
INNER JOIN Person P2 on I2.person_id = P2.id
WHERE P2.id = P.id)
AND I.percent = (SELECT max(I2.percent)
FROM Illnesess I2
INNER JOIN Person P2 on I2.person_id = P2.id
WHERE P2.id = P.id AND I2.date = I.date)
这将返回 43,someOtherIllness,2015-12-08 ,并且至少我会这样认真工作。我需要涵盖一个例外情况,如果最近的日期百分比是 null 我需要使用前一个日期具有百分比的行。
51, someIllness, 2015-12-07
null,someOtherIllness, 2015-12-08
null, anotherIllness, 2015-12-08
51,someIllness,2015-12-07将是我需要的结果。
如果有人帮忙,我会感激不尽。谢谢。
答案 0 :(得分:0)
如果您将从头开始删除所有没有百分比的疾病?
SELECT I.percent, I.illness, I.date
FROM Illnesses I
INNER JOIN Person P on I.person_id = P.id // an inner join I use in where clause
WHERE P.id = someId
AND I.percent IS NULL
答案 1 :(得分:0)
你可以试试这个
SELECT I.percent, I.illness, I.date
FROM Illnesses I
INNER JOIN Person P on I.person_id = P.id
WHERE I.percent IS NOT NULL
ORDER BY I.date, I.percent DESC
LIMIT 1
如果您希望按最高百分比排序,可以尝试按顺序交换日期和百分比位置