У меня есть таблица, которая выглядит так:
+ -------------+------------+------+-----------+-----------+
| M_PACK_INTID | M_PACK_REF | M_NB | M_XPFWSPT | M_BPFOLIO |
+ -------------+------------+------+-----------+-----------+
| 1.781 | 100 | 101 | 12 | PFOLIO |
| 1.781 | 100 | 102 | 12 | PFOLIO |
| 1.781 | 100 | 103 | 12 | PFOLIO |
| 1.781 | 100 | 104 | 12.3 | PFOLIO |
| 1.781 | 200 | 201 | 15 | PFOLIO |
| 1.781 | 200 | 202 | 15 | PFOLIO |
| 1.781 | 200 | 203 | 15 | PFOLIO |
| 1.781 | 200 | 204 | 15 | PFOLIO |
+ -------------+------------+------+-----------+-----------+
Обычно для каждого M_PACK_REF
имеется 4 разных M_NB
, которым назначается потенциально различный M_XPFWSPT
.
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: Я хотел бы извлечь все M_PACK_REF
, для которых первый и четвертый M_NB
имеют различное значение M_XPFWSPT
.
В приведенном выше примере это будет иметь место для M_PACK_REF = 100
(поскольку его M_NB = 101
имеет M_XPFWSPT = 12
, а M_NB = 104
имеет M_XPFWSPT = 12.3
).
Вот SQL скрипка , где вы можете поиграть.
Согласно данным этой скрипки, ожидаемый результат будет примерно таким:
M_PACK_REF
100
400
Я пытался извлечь из этой таблицы первую и последнюю строку для каждого M_PACK_REF
и посчитать число встречающихся M_XPFWSPT
, которые отличаются:
select M_PACK_REF
from
(
select M_PACK_REF, M_NB, M_XPFWSPT
from GATHER
where M_NB = (select min(M_NB) from GATHER G where G.M_PACK_REF = GATHER.M_PACK_REF)
or M_NB = (select max(M_NB) from GATHER G where G.M_PACK_REF = GATHER.M_PACK_REF)
)
group by M_PACK_REF, M_NB, M_XPFWSPT
having count (distinct M_XPFWSPT) > 1;
... но это показывает мне пустую таблицу.
Может ли кто-нибудь помочь, пожалуйста?