Запрос
SELECT
ppc.personid,
ppc.category,
ppc.phonenumber,
ppc.createts
FROM
person_phone_contacts ppc
WHERE
CURRENT_TIMESTAMP BETWEEN ppc.createts AND ppc.endts
AND CURRENT_DATE BETWEEN ppc.effectivedate AND ppc.enddate
ORDER BY
ppc.personid, ppc.category, ppc.createts DESC
Результирующие данные
3742 | Home | xxx-xxx-xxxx | 2009-09-09 11:59:00.357-04
3742 | Home | xxx-xxx-xxxx | 2009-08-04 20:13:17.161-04*
3742 | Mobile | xxx-xxx-xxxx | 2009-09-09 11:59:20.070-04
3742 | Mobile | xxx-xxx-xxxx | 2009-09-09 11:59:20.070-04*
3742 | Other | xxx-xxx-xxxx | 2009-08-04 20:13:17.161-04
* Желаемые дубликаты для удаления.
Желаемые данные
3742 | Home | xxx-xxx-xxxx | 2009-09-09 11:59:00.357-04
3742 | Mobile | xxx-xxx-xxxx | 2009-09-09 11:59:20.070-04
3742 | Other | xxx-xxx-xxxx | 2009-08-04 20:13:17.161-04
Вопрос
Какой самый эффективный способ получения одного телефонного номера для категории на человека с использованием самой последней даты (даже если несколько телефонных номеров в одной категории для одного человека имеют одну и ту же дату)?
Возможные решения
Использование DISTINCT ON (ppc.category) category
может ограничить результаты на человека, но как применить его ко всем людям, индивидуально?
Ограничения
- PostgreSQL 8.3
- Нет сохраненных функций или процедур
Спасибо!