减小历史状态的粒度 table?
Reducing granularity of historical status table?
我有一个 table,其中基本上是项目任务的历史日志。
每一行都包含项目的 ID 以及一项特定任务的开始或结束日期。
我需要减少粒度,以便所有 start/end 时间都在一行中(参见图像中的 ID 1 和 2)
但这是让我感到困惑的部分,有些行可能有重复的任务条目,但具有不同的时间戳 - 这意味着用户必须返回并重做任务。对于这些,我只需要该特定列的最新时间戳(参见图中的 ID 3)。
还有另一个 table 包含主要 table 项目的 ID。我试过使用左连接,但我似乎无法获得最新的时间戳。
到目前为止我的处理方式是这样的:
SELECT ID, a1.A_START, a2.A_END [...] c2.C_END FROM PROJECT
LEFT JOIN (SELECT ID, A_START FROM PROJECT_TASK ORDER BY A_START DESC) a1 ON a1.ID = p.ID
LEFT JOIN (SELECT ID, A_END FROM PROJECT_TASK ORDER BY A_END DESC) a2 ON a2.ID = p.ID
LEFT JOIN (SELECT ID, B_START FROM PROJECT_TASK ORDER BY B_START DESC) b1 ON b1.ID = p.ID
...
LEFT JOIN (SELECT ID, C_END FROM PROJECT_TASK ORDER BY C_END DESC) c2 ON c2.ID = p.ID
显然这没有按预期工作,因为我需要清除所有重做的旧任务 - 这就是我遇到的问题。
如有任何提示或建议,我们将不胜感激。
注意:table 都不能更改 - 我只能根据给定的数据创建一个新事实 table。
免责声明:很可能之前有人在这里问过类似的问题,但我想不出具体要问什么实际上得出了任何有用的结果。如果有人 link 有类似的 post,我将编辑此消息以包含 link 作为未来用户的参考。
您可以对所有这 6 列使用聚合。您可以根据需要更改列名和别名
select id, max(col1), max(col2), max(col3), max(col4), max(col5), max(col6)
from your_table
group by id;
我有一个 table,其中基本上是项目任务的历史日志。
每一行都包含项目的 ID 以及一项特定任务的开始或结束日期。
我需要减少粒度,以便所有 start/end 时间都在一行中(参见图像中的 ID 1 和 2)
但这是让我感到困惑的部分,有些行可能有重复的任务条目,但具有不同的时间戳 - 这意味着用户必须返回并重做任务。对于这些,我只需要该特定列的最新时间戳(参见图中的 ID 3)。
还有另一个 table 包含主要 table 项目的 ID。我试过使用左连接,但我似乎无法获得最新的时间戳。
到目前为止我的处理方式是这样的:
SELECT ID, a1.A_START, a2.A_END [...] c2.C_END FROM PROJECT
LEFT JOIN (SELECT ID, A_START FROM PROJECT_TASK ORDER BY A_START DESC) a1 ON a1.ID = p.ID
LEFT JOIN (SELECT ID, A_END FROM PROJECT_TASK ORDER BY A_END DESC) a2 ON a2.ID = p.ID
LEFT JOIN (SELECT ID, B_START FROM PROJECT_TASK ORDER BY B_START DESC) b1 ON b1.ID = p.ID
...
LEFT JOIN (SELECT ID, C_END FROM PROJECT_TASK ORDER BY C_END DESC) c2 ON c2.ID = p.ID
显然这没有按预期工作,因为我需要清除所有重做的旧任务 - 这就是我遇到的问题。
如有任何提示或建议,我们将不胜感激。
注意:table 都不能更改 - 我只能根据给定的数据创建一个新事实 table。
免责声明:很可能之前有人在这里问过类似的问题,但我想不出具体要问什么实际上得出了任何有用的结果。如果有人 link 有类似的 post,我将编辑此消息以包含 link 作为未来用户的参考。
您可以对所有这 6 列使用聚合。您可以根据需要更改列名和别名
select id, max(col1), max(col2), max(col3), max(col4), max(col5), max(col6)
from your_table
group by id;