Как получить первое появление самой активной строки строки в таблице заданий с определенным deptid,

Например: Emplid 001 наиболее эффективная датированная строка (скажем, 01/01/2013) активна и принадлежит deptid 101. Предположим, что если у него есть еще две строки с тем же deptid, скажем, одна на 12/10/2012 и 12/01/2012, Затем мне нужно получить строки от 12.01.2012. Так что это должна быть первая строка непрерывных вхождений. В случае, если у меня есть строка с 12.05.2012 с другим deptid (102), в этом случае мой запрос должен вернуть 10 /12/2012 rows, пожалуйста, помогите с этим


person Ramesh R    schedule 11.01.2013    source источник
comment
Не могли бы вы опубликовать свой запрос?   -  person Kimi    schedule 11.01.2013
comment
ВЫБЕРИТЕ EMPLID, MIN(EFFDT) EFFDT, DEPTID FROM ( ВЫБЕРИТЕ T1.EMPLID, T1.EFFDT, T1.DEPTID, MIN(T2.EFFDT) EFFDT1 ИЗ PS_JOB T1 LEFT JOIN PS_JOB T2 ON T1.EFFDT ‹= T2.EFFDT AND T1 .DEPTID ‹› T2.DEPTID И T1.EMPLID ‹› T2.EMPLID ГРУППА ПО T1.EMPLID ,T1.EFFDT, T1.DEPTID ) X ГРУППА ПО EMPLID,EFFDT, DEPTID ORDER BY 1;   -  person Ramesh R    schedule 11.01.2013
comment
Могу ли я получить ответ от кого-нибудь, плз   -  person Ramesh R    schedule 15.01.2013


Ответы (2)


Хотя и не с левым соединением, здесь используется дополнительный выбор минимальной даты вступления в силу, чтобы получить нужные вам данные — трюк для получения минимального effdt по deptid заключается в том, чтобы поместить deptid в дополнительный выбор. Обратите внимание, что empl_rcd_nbr обычно используется в качестве ограничителя в подвыборе (и job2.empl_rcd_nbr — job.empl_rcd_nbr), но у вас его не было в исходном выборе. Если вы получаете повторяющиеся строки, проверьте значение empl_rcd_nbr, так как это первичный ключ:

select job.emplid, job.effdt, job.deptid
from ps_job job
where job.effdt = (select Min(job2.effdt) 
                   from ps_job job2
                   where job2.emplid = job.emplid
                     and job2.deptid = job.deptid)
order by job.emplid
person cardmagik    schedule 17.01.2013
comment
В примере, приведенном в вопросе, этот запрос не вернет строку от 12.10.2012, если между 12.01.2012 и 12.10.2012 существует строка с другим deptid. - person navi; 03.03.2013
comment
@navi Извините за это - я не совсем понял вопрос - ваше решение имеет смысл, если ВСЕГДА есть предыдущий отдел, а также только один другой отдел - потому что их может быть больше одного. Было бы довольно сложно создать этот sql - на этом этапе я бы использовал SQR в системе PeopleSoft. - person cardmagik; 04.03.2013
comment
Истинный! При написании в движке приложения SQL может оказаться большим. Но это то, что @Ramesh R должен выяснить :P Мы здесь только для того, чтобы предложить и помочь :D - person navi; 05.03.2013

Чтобы достичь того, что вам нужно, вам нужно будет выбрать строку min (effdt) с deptid, совпадающую с deptid текущей строки max (effdt), а также не должно существовать строки > min (effdt) с deptid ‹ > deptid строки min(effdt).

Запрос, удовлетворяющий вышеуказанным условиям, должен помочь вам с набором результатов.

person navi    schedule 03.03.2013