Мне нужна помощь с фильтрацией строк результатов, возвращаемых запросом. У меня есть Болезни стол с колонками , болезнь, дата.SQL-запрос фильтрации возвращаемых строк по условиям
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
Так что в моем случае для лица с идентификатором = 13 query'll вернуться
51, someIllness, 2015-12-07
43,someOtherIllness, 2015-12-08
null, anotherIllness, 2015-12-08
Мне нужно, чтобы выбрать строку, в которой дата является последней, и самым высоким процентом если есть несколько строк с этой датой. Я добавил следующий код, где положение
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 будет результат мне нужно.
Если кто-нибудь поможет, я буду благодарен. Благодарю.
Какого СУБД вы с помощью? –
Я использую postgreSQL –