Как найти предпоследний элемент массива, а если его нет - получить NULL
Коллеги, есть запрос:
WITH cte AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY gcs.collaborator_id ORDER BY ser.delivery_date DESC) rn,
gcs.collaborator_id as collId
, gcs.collaborator_fullname
, cs.hire_date
, cs.position_name as posName
, cs.position_parent_name
, ser.delivery_date
, ser.expire_date
, ser.id AS sert_id
, als.id AS activ_learning
, als.start_usage_date
, DATEDIFF(MONTH, ser.delivery_date, getDate()) as diff
, clr.[data].value('(collaborator/custom_elems/custom_elem[name=''valSert''])[1]/value[1]', 'varchar(20)') as valSert
, CAST(CASE WHEN DATEADD(DAY, DATEDIFF(DAY, 0, Getdate()), -1) = DATEADD(dd, DATEDIFF(d, 0, clr.[data].value('(collaborator/change_logs/change_log[last()]/date)[1]', 'datetime')), 0) THEN 1 ELSE 0 END AS bit) as isNewPosition
, cs.current_state as workState
, cs.is_dismiss as dismissState
, req.status_id as reqStatus
, clr.[data].value('(collaborator/change_logs/change_log[last()]/position_name)[1]', 'varchar(50)') as Position
FROM group_collaborators gcs
JOIN collaborators cs on gcs.collaborator_id = cs.id
JOIN collaborator clr on cs.id = clr.id
LEFT JOIN certificates ser ON cs.id = ser.person_id AND ser.type_name LIKE 'Валютный сертификат'
LEFT JOIN active_learnings als ON cs.id = als.person_id AND als.course_id = 6487888464122890146
LEFT JOIN requests req ON cs.id = req.person_id AND req.request_type_id = 6883003852694109236
WHERE gcs.code LIKE 'valSert_group'
)
SELECT *
FROM cte
WHERE rn = 1;
Вот в этой строке выводится название должности из XML документа, из массива change_logs:
, clr.[data].value('(collaborator/change_logs/change_log[last()]/position_name)[1]', 'varchar(50)') as Position
Т.е. к примеру, в документе, где есть вот такой массив:
<change_logs>
<change_log>
<position_name>стажер</position_name>
</change_log>
<change_log>
<position_name>менеджер</position_name>
</change_log>
<change_log>
<position_name>управляющий центром</position_name>
</change_log>
</change_logs>
я получу "Управляющего центром". Помогите, пожалуйста, сформировать запрос, чтобы получить значение предпоследнего элемента массива, т.е. "менеджер". А так же - что будет, если в массиве только один элемент и предпоследнего не будет?