import { ViewColumn, ViewEntity } from "typeorm"; @ViewEntity({ expression: ` WITH resultData AS ( SELECT commandDateAffect, positionName, positionCee, TIMESTAMPDIFF( DAY, LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff, TIMESTAMPDIFF( DAY, LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years', TIMESTAMPDIFF( DAY, LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months', TIMESTAMPDIFF( DAY, LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days', posNo, positionExecutive, positionType, positionLevel, OrgRoot, orgChild1, orgChild2, orgChild3, orgChild4, commandCode, commandName, commandNo, commandYear, remark, profileId, ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber FROM ( SELECT commandDateAffect, commandDateSign, positionName, positionCee, posNo, positionExecutive, positionType, positionLevel, OrgRoot, orgChild1, orgChild2, orgChild3, orgChild4, commandCode, commandName, commandNo, commandYear, remark, profileId, @group := IF(@prevPosition = positionName, @group, @group + 1) AS groupedId, @prevPosition := positionName FROM profileSalary, (SELECT @group := 0, @prevPosition := NULL) AS vars WHERE commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16) ORDER BY commandDateAffect ASC, commandDateSign ASC ) AS groupedPosition GROUP BY profileId, groupedId, positionName ) SELECT commandDateAffect, positionName, positionCee, days_diff, Years, Months, Days, posNo, positionExecutive, positionType, positionLevel, OrgRoot, orgChild1, orgChild2, orgChild3, orgChild4, commandCode, commandName, commandNo, commandYear, remark, profileId, orderNumber FROM resultData UNION ALL SELECT CURDATE() AS commandDateAffect, NULL AS positionName, NULL AS positionCee, TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff, TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years', TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months', TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days', NULL AS posNo, NULL AS positionExecutive, NULL AS positionType, NULL AS positionLevel, NULL AS OrgRoot, NULL AS orgChild1, NULL AS orgChild2, NULL AS orgChild3, NULL AS orgChild4, NULL AS commandCode, NULL AS commandName, NULL AS commandNo, NULL AS commandYear, NULL AS remark, profileId, NULL AS orderNumber FROM resultData `, }) export class viewCurrentTenureOfficer { @ViewColumn() commandDateAffect: Date; @ViewColumn() days_diff: number; @ViewColumn() Years: number; @ViewColumn() Months: number; @ViewColumn() Days: number; @ViewColumn() positionName: string; @ViewColumn() positionCee: string; @ViewColumn() posNo: string; @ViewColumn() positionExecutive: string; @ViewColumn() positionType: string; @ViewColumn() positionLevel: string; @ViewColumn() OrgRoot: string; @ViewColumn() orgChild1: string; @ViewColumn() orgChild2: string; @ViewColumn() orgChild3: string; @ViewColumn() orgChild4: string; @ViewColumn() commandCode: number; @ViewColumn() commandName: string; @ViewColumn() commandNo: string; @ViewColumn() commandYear: number; @ViewColumn() remark: string; @ViewColumn() profileId: string; @ViewColumn() orderNumber: number; }