Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取连接多个表的最新ModifiedDate_Sql_Sql Server_Tsql_Datetime_Join - Fatal编程技术网

Sql 获取连接多个表的最新ModifiedDate

Sql 获取连接多个表的最新ModifiedDate,sql,sql-server,tsql,datetime,join,Sql,Sql Server,Tsql,Datetime,Join,我有四张桌子 项目表 项目终结表 项目附加时间表 项目完成表 根据用户的操作修改任何表。所有表都将projectId作为ProjectTable中的foreignKey 我想从任何表中获取最新的modifiedDate。例如:ProjectFinalizeTable可以具有最新的modifiedDate,以便从查询中返回该日期 给你一个我想要的想法就像下面的查询(注:下面的查询只是让你知道我到底在找什么) 我已经看过了,但是找不到从多个表中计算MAX(Date)的方法。如果您想在多个表上

我有四张桌子

  • 项目表

  • 项目终结表

  • 项目附加时间表

  • 项目完成表

  • 根据用户的操作修改任何表。所有表都将projectId作为ProjectTable中的foreignKey

    我想从任何表中获取最新的
    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