198 lines
5 KiB
TypeScript
198 lines
5 KiB
TypeScript
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,
|
|
profileEmployeeId,
|
|
ROW_NUMBER() OVER (PARTITION BY profileEmployeeId 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,
|
|
profileEmployeeId,
|
|
LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign,
|
|
ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) -
|
|
ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId
|
|
FROM
|
|
profileSalary
|
|
WHERE
|
|
commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16)
|
|
ORDER BY
|
|
commandDateAffect ASC, commandDateSign ASC
|
|
) AS groupedPosition
|
|
WHERE
|
|
prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign
|
|
GROUP BY
|
|
profileEmployeeId, 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,
|
|
profileEmployeeId,
|
|
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,
|
|
profileEmployeeId,
|
|
NULL AS orderNumber
|
|
FROM resultData
|
|
`,
|
|
})
|
|
export class viewCurrentTenureEmployee {
|
|
@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()
|
|
profileEmployeeId: string;
|
|
|
|
@ViewColumn()
|
|
orderNumber: number;
|
|
}
|