Предполагается, что вы имеете в виду «строки, которые изменились за последние 24 часа», как подразумевает заголовок, а не «последние 24 обновленные записи», что означает, что вы хотите, чтобы ровно 24 строки были возвращены независимо от того, когда они были изменены, что-то вроде
SELECT DISTINCT c.constit_id AS constitid,
REPLACE (c.in_labelname, 'None', '') AS fullname,
c.firstname AS firstname, c.lastname AS lastname,
c.indiv_title AS title, e.e_addr AS email,
'InActive' AS status
FROM tbl_constit cn, tbl_email e,tbl_catcod s
WHERE c.constit_id = e.constit_id
AND c.constit_id = s.constit_id(+)
AND e.e_type = 'EMAIL'
AND e.e_default = '1'
AND s.cat_code IN ('SPEMU', 'SPENM')
AND greatest( cn.chgd_dt, e.chgd_dt ) > sysdate - interval '1' day
ORDER BY c.constit_id;
или
SELECT DISTINCT c.constit_id AS constitid,
REPLACE (c.in_labelname, 'None', '') AS fullname,
c.firstname AS firstname, c.lastname AS lastname,
c.indiv_title AS title, e.e_addr AS email,
'InActive' AS status
FROM tbl_constit cn, tbl_email e,tbl_catcod s
WHERE c.constit_id = e.constit_id
AND c.constit_id = s.constit_id(+)
AND e.e_type = 'EMAIL'
AND e.e_default = '1'
AND s.cat_code IN ('SPEMU', 'SPENM')
AND (cn.chgd_dt > sysdate - interval '1' day OR
e.chgd_dt > sysdate - interval '1' day)
ORDER BY c.constit_id;
Последнее может быть более эффективным, если CHGD_DT
проиндексировано в любой таблице.