2015-12-08 2 views
0

Мне нужна помощь с фильтрацией строк результатов, возвращаемых запросом. У меня есть Болезни стол с колонками , болезнь, дата.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 будет результат мне нужно.

Если кто-нибудь поможет, я буду благодарен. Благодарю.

+0

Какого СУБД вы с помощью? –

+0

Я использую postgreSQL –

ответ

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 
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 

, если вы хотите быть сортировать по самому высокому проценту первого, вы можете попробовать обмениваясь датой и процентным место в порядке

Смежные вопросы