Sql 获取连接多个表的最新ModifiedDate
我有四张桌子Sql 获取连接多个表的最新ModifiedDate,sql,sql-server,tsql,datetime,join,Sql,Sql Server,Tsql,Datetime,Join,我有四张桌子 项目表 项目终结表 项目附加时间表 项目完成表 根据用户的操作修改任何表。所有表都将projectId作为ProjectTable中的foreignKey 我想从任何表中获取最新的modifiedDate。例如:ProjectFinalizeTable可以具有最新的modifiedDate,以便从查询中返回该日期 给你一个我想要的想法就像下面的查询(注:下面的查询只是让你知道我到底在找什么) 我已经看过了,但是找不到从多个表中计算MAX(Date)的方法。如果您想在多个表上
modifiedDate
。例如:ProjectFinalizeTable
可以具有最新的modifiedDate
,以便从查询中返回该日期
给你一个我想要的想法就像下面的查询(注:下面的查询只是让你知道我到底在找什么)
我已经看过了,但是找不到从多个表中计算
MAX(Date)
的方法。如果您想在多个表上计算MAX(modifiedDate)
,那么将它们合并和聚合似乎是一种方法
with cte as (
select projectId, modifiedDate
from dbo.ProjectTable
union all
select projectId, modifiedDate
from dbo.ProjectFinalizeTable
union all
select projectId, modifiedDate
from dbo.ProjectAdditionalTimeTable
union all
select projectId, modifiedDate
from dbo.ProjectCompleteTable
)
select projectId, max(modifiedDate)
from cte
group by projectId;
如果您希望在许多表上使用
max(modifiedDate)
,那么将它们联合并聚合似乎是一种可行的方法
with cte as (
select projectId, modifiedDate
from dbo.ProjectTable
union all
select projectId, modifiedDate
from dbo.ProjectFinalizeTable
union all
select projectId, modifiedDate
from dbo.ProjectAdditionalTimeTable
union all
select projectId, modifiedDate
from dbo.ProjectCompleteTable
)
select projectId, max(modifiedDate)
from cte
group by projectId;
你可以试试这个。尽管我无法证实
SELECT
PT.projectid,
(SELECT MAX(LastModifiedDate)
FROM (VALUES (PT.ModifiedDate),(PFT.ModifiedDate),(PATT.ModifiedDate), (PCT.ModifiedDate)) AS UpdateDate(LastModifiedDate))
AS LastModifiedDate
FROM
ProjectTable PT
JOIN ProjectFinalizeTable PFT ON PT.projectid = PFT.projectid
JOIN ProjectAdditionalTimeTable PATT ON PT.projectid = PATT.projectid
JOIN ProjectCompleteTable PCT ON PT.projectid = PCT.projectid
你可以试试这个。尽管我无法证实
SELECT
PT.projectid,
(SELECT MAX(LastModifiedDate)
FROM (VALUES (PT.ModifiedDate),(PFT.ModifiedDate),(PATT.ModifiedDate), (PCT.ModifiedDate)) AS UpdateDate(LastModifiedDate))
AS LastModifiedDate
FROM
ProjectTable PT
JOIN ProjectFinalizeTable PFT ON PT.projectid = PFT.projectid
JOIN ProjectAdditionalTimeTable PATT ON PT.projectid = PATT.projectid
JOIN ProjectCompleteTable PCT ON PT.projectid = PCT.projectid
请向我们展示1)样本数据(格式化文本)2)预期结果(格式化文本)3)您迄今为止的尝试…@DaleK,我认为这里我们不需要样本数据,表格结构非常清晰。我想不出任何解决方案,所以我没有尝试任何查询。无法理解如何通过比较多个表来计算最大(日期)。我只是想知道如何从多个表中计算最大日期。这对你来说是显而易见的,当然,这是你的系统,但对我来说并不明显(可能对其他人来说也不明显)。。。你的问题越清楚,提供的细节越多,你得到答案的速度就越快。您必须能够生成一些查询,而不是获取所需数据的查询。如果您将示例数据添加为DDL/DML(即填充的临时表),那么就很容易为您提供帮助,因为我们不必输入测试数据。当需要使用特定数据而不是理论问题时,SQL问题更容易回答。请向我们展示1)样本数据(格式化文本)2)预期结果(格式化文本)3)您迄今为止的尝试…@DaleK,我认为这里我们不需要样本数据,表结构非常清晰。我想不出任何解决方案,所以我没有尝试任何查询。无法理解如何通过比较多个表来计算最大(日期)。我只是想知道如何从多个表中计算最大日期。这对你来说是显而易见的,当然,这是你的系统,但对我来说并不明显(可能对其他人来说也不明显)。。。你的问题越清楚,提供的细节越多,你得到答案的速度就越快。您必须能够生成一些查询,而不是获取所需数据的查询。如果您将示例数据添加为DDL/DML(即填充的临时表),那么就很容易为您提供帮助,因为我们不必输入测试数据。当需要使用特定数据时,SQL问题比理论问题更容易回答。只需验证结果。看起来很有希望!不过,使用union的好方法。我觉得效果不错。由于我们使用的是
union all
,当有大量记录时会出现性能问题吗?不应该,只要所有表都有良好的索引union all
的性能并不差,它的union
在执行重复数据消除的过程中可能会性能差。只需验证结果即可。看起来很有希望!不过,使用union的好方法。我觉得效果不错。由于我们使用的是union all
,当有大量记录时会出现性能问题吗?不应该,只要所有表都有良好的索引union all
的性能并不差,它的union
在对结果进行重复数据消除时可能会性能差。
Select MAX(pt.modifiedDate, pat.modifiedDate, pft.modifiedDate, pct.modifiedDate) as latestModifiedDate
from ProjectTable pt
join ProjectFinalizeTable pft pt.projectid = pft.projectid
join ProjectAdditionalTimeTable pat pt.projectid = pat.projectid
join ProjectCompleteTable pct pt.projectid = pct.projectid
with cte as (
select projectId, modifiedDate
from dbo.ProjectTable
union all
select projectId, modifiedDate
from dbo.ProjectFinalizeTable
union all
select projectId, modifiedDate
from dbo.ProjectAdditionalTimeTable
union all
select projectId, modifiedDate
from dbo.ProjectCompleteTable
)
select projectId, max(modifiedDate)
from cte
group by projectId;
SELECT
PT.projectid,
(SELECT MAX(LastModifiedDate)
FROM (VALUES (PT.ModifiedDate),(PFT.ModifiedDate),(PATT.ModifiedDate), (PCT.ModifiedDate)) AS UpdateDate(LastModifiedDate))
AS LastModifiedDate
FROM
ProjectTable PT
JOIN ProjectFinalizeTable PFT ON PT.projectid = PFT.projectid
JOIN ProjectAdditionalTimeTable PATT ON PT.projectid = PATT.projectid
JOIN ProjectCompleteTable PCT ON PT.projectid = PCT.projectid