Получить последнюю активность элемента в виде одной строки на элемент

Также имейте в виду, что удаление указателя базового класса, когда нет виртуального деструктора, приведет к неопределенному поведению . Что-то, что я узнал совсем недавно:

Как следует переопределять удаление в C ++?

Я использую C ++ в течение многих лет, и мне все еще удается повесить я.

-1
задан a_horse_with_no_name 6 March 2019 в 15:05
поделиться

1 ответ

Переместите 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;
0
ответ дан Zohar Peled 6 March 2019 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: