Мне нужно найти людей, назначенных профилю 99001, но только если они были ранее назначены профилю, заканчивающемуся 0 (но не всеми нулями). Текущий профиль будет иметь эффективную дату, которая соответствует дате истечения предыдущей.Выбор записи путем сравнения столбца с предыдущим
Мой код не возвращает никаких записей:
SELECT p.personnum,
ap.name,
aa.effectivedtm,
aa.expirationdtm
FROM vp_employeev42 p,
ASSIGNACCRUAL aa,
ACCRUALPROFILE ap
WHERE p.personid=aa.employeeid
and aa.ACCRUALPROFILEID= ap.ACCRUALPROFILEID
and p.employmentstatus = 'Active'
and p.ACCRUALPRFLNAME = '99001'
and ap.name = '99001'
and aa.EFFECTIVEDTM = (
select t2.expirationdtm from assignaccrual t2
where t2.employeeid = p.personid
and t2.accrualprofileid = ap.ACCRUALPROFILEID
and ap.NAME like '%0'
and ap.name != '00000')
order by p.PERSONNUM, aa.EFFECTIVEDTM
Любая помощь будет большим.
ASSIGNACCRUAL-Sample
EMPLOYEEID ACCRUALPROFILEID EFFECTIVEDTM EXPIRATIONDTM UPDATEDBYUSRACCTID UPDATEDTM VERSIONCNT
3778 33482 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3779 33483 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
403019 34285 1 1-Jan-53 1-Jan-14 -10 29-Dec-13 1
3781 33485 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3782 33486 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3783 33487 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3784 33488 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3785 33489 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3788 33492 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
403021 65065 1 1-Jan-53 1-Jan-14 -10 29-Dec-13 1
3790 33494 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
3792 33496 1 1-Jan-53 1-Jan-00 -1 26-Mar-11 1
403023 39566 1 1-Jan-53 1-Jan-14 -10 29-Dec-13 1
ACCRUALPROFILE-Sample
ACCRUALCODEID ADVANCEDSW NAME VERSION
1 0 Default 9
202 0 4040 1
203 0 4042 3
2 0 0 3
3 0 1010 10
4 0 1011 5
5 0 1012 3
6 0 2000 4
7 0 2001 3
8 0 2010 4
Если удалить последние 2 отборочные это то, что я хотел бы видеть.
1004719 Default 01-JAN-53 01-JAN-14
1004719 01010 01-JAN-14 28-JAN-14
1004719 99001 28-JAN-14 01-JAN-00
1005256 Default 01-JAN-53 01-JAN-14
1005256 02010 01-JAN-14 01-FEB-14
1005256 99001 01-FEB-14 01-JAN-00
1008323 Default 01-JAN-53 01-JAN-14
1008323 01010 01-JAN-14 07-FEB-14
1008323 99001 07-FEB-14 01-JAN-00
1014598 Default 01-JAN-53 01-JAN-14
1014598 02010 01-JAN-14 28-JAN-14
1014598 99001 28-JAN-14 01-JAN-00
1024852 Default 01-JAN-53 01-JAN-14
1024852 01010 01-JAN-14 28-JAN-14
взять взгляд на аналитические функции. Вы не публикуете достаточную информацию, такую как схемы таблиц и образцы данных, поэтому не знаете, какую помощь вы получите без нее. – OldProgrammer
Как @OldProgrammer говорит - аналитические функции, попробуйте подключиться по уровню или около того. –
Я действительно не очень разбираюсь в Oracle. Я могу найти простые запросы, но это меня смущает. – user3298859