Также имейте в виду, что удаление указателя базового класса, когда нет виртуального деструктора, приведет к неопределенному поведению . Что-то, что я узнал совсем недавно:
Как следует переопределять удаление в C ++?
Я использую C ++ в течение многих лет, и мне все еще удается повесить я.
Переместите row_number
во внешний запрос и оберните все это в другой запрос:
SELECT A.ItemCode, A.ObjType, A.DocNum, A.LastActivity
FROM
(
SELECT A.ItemCode, A.ObjType, A.DocNum, A.LastActivity,
ROW_NUMBER() OVER (PARTITION BY ItemCode ORDER BY DocEntry DESC) AS 'rownum'
FROM
(
SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T0.[DocEntry], T1.[DocDate] AS 'LastActivity'
FROM INV1 T0
INNER JOIN OINV T1
ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory'
OR T0.[ItemCode] = 'A00001'
UNION ALL
SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T0.[DocEntry], T1.[DocDate] AS 'LastActivity'
FROM RDR1 T0
INNER JOIN ORDR T1
ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory'
OR T0.[ItemCode] = 'A00001'
) A
) B
WHERE A.rownum=1;
Совет: Вы можете сделать запросы более читабельными, заменив производные таблицы общими табличными выражениями:
WITH CTEUnion AS
(
SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T0.[DocEntry], T1.[DocDate] AS 'LastActivity'
FROM INV1 T0
INNER JOIN OINV T1
ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory'
OR T0.[ItemCode] = 'A00001'
UNION ALL
SELECT T0.[ItemCode], T1.[ObjType], T1.[DocNum], T0.[DocEntry], T1.[DocDate] AS 'LastActivity'
FROM RDR1 T0
INNER JOIN ORDR T1
ON T0.[DocEntry]=T1.[DocEntry]
WHERE T0.[ItemCode] = 'A00001_ test non inventory'
OR T0.[ItemCode] = 'A00001'
), CTERowNum AS
(
SELECT ItemCode, ObjType, DocNum, LastActivity,
ROW_NUMBER() OVER (PARTITION BY ItemCode ORDER BY DocEntry DESC) AS 'rownum'
FROM CTEUnion
)
SELECT ItemCode, ObjType, DocNum, LastActivity
FROM CTERowNum
WHERE rownum=1;