我有以下的基本数据集。
我想知道每个ProcessStepOne记录ProcessStepLast时间戳。
我宁愿不加入就可能的话时间戳,想知道这是否是一个窗口函数的候选人?我给它一去,但不能完全到达那里。
任何帮助将非常感激。
Id PersonId ProcessStepOne
1084465 11802 2019-01-18 15:45:44.000
1084507 11802 2019-01-18 16:07:22.000
Id PersonId ProcessStepLast
1016970 11802 2019-01-24 12:51:52.600
1016996 11802 2019-01-24 12:55:21.953
1013472 11802 2019-01-24 12:51:45.803
Id PersonId ProcessStepOne ProcessStepLast
1084465 11802 2019-01-18 15:45:44.000 2019-01-24 12:51:52.600
1084507 11802 2019-01-18 16:07:22.000 2019-01-24 12:55:21.953
你期望的输出似乎不与你的描述完全排队,因为从第二个数据集的2019-01-24 12:51:45.803
记录没有出现在任何地方。但这里一个通用的解决方案可能工作将联合在一起的两个表,然后就在对汇总:
WITH cte AS (
SELECT Id, PersonId, ProcessStepOne AS ProcessStep, 1 AS source,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY ProcessStepOne) rn
FROM table1
UNION ALL
SELECT Id, PersonId, ProcessStepTwo, 2,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY ProcessStepTwo)
FROM table2
)
SELECT
MAX(CASE WHEN source = 1 THEN Id END) AS Id,
PersonId,
MIN(ProcessStep) AS ProcessStepOne,
MAX(ProcessStep) AS ProcessStepTwo
FROM cte
GROUP BY
PersonId,
rn;
作为一个侧面说明,计算列source
我在联合查询CTE大家介绍的是有那么我们能记住这Id
值对应于第一个表。这是为了满足您的期望输出使用第一源Id
标签的要求。