代码之家  ›  专栏  ›  技术社区  ›  Alex

从视图中选定的表中获取最新日期列的值

  •  1
  • Alex  · 技术社区  · 12 年前

    说我有一个观点,叫做 vProducts

    v产品 从中选择数据 tblProducts, tblCategories, tblProductPrices

    这3个表中的每一个表都有一列,称为 dateUpdated 类型的 DateTime

    在我看来,我想有一个专栏,也叫 更新日期

    这应该是最新的 更新日期 在里面 tblProducts , tblCategories tblProductPrices

    这可能吗?

    2 回复  |  直到 12 年前
        1
  •  2
  •   marc_s    12 年前

    你总是可以用 CASE 语句,以确定三个日期中哪一个是最近的日期:

    CREATE VIEW vProducts AS
       SELECT
          (your list of columns here....),      
          DateUpdated = 
            CASE    
              WHEN p.DateUpdated >= c.DateUpdated AND p.DateUpdated >= pr.DateUpdated
                THEN p.DateUpdated
              WHEN c.DateUpdated >= p.DateUpdated AND c.DateUpdated >= pr.DateUpdated
                THEN c.DateUpdated
              WHEN pr.DateUpdated >= c.DateUpdated AND pr.DateUpdated >= p.DateUpdated
                THEN pr.DateUpdated
              ELSE
                '19000101'
            END
    
        FROM 
            dbo.tblProducts p
        INNER JOIN 
            dbo.tblCategories c ON .......
        INNER JOIN 
            dbo.tblProductPrices pr ON .........
    

    三个条件中的一个应该始终适用(否则你会得到 19000101 作为值)

        2
  •  0
  •   Mahmoud Gamal    12 年前

    使用 UNION 从三张表中得到所有日期,那么 ORDER 他们:

    ;WITH cte AS
    (
        SELECT dateUpdated FROM tblProducts
        UNION ALL 
        SELECT dateUpdated FROM tblCategories 
        UNION ALL
        SELECT dateUpdated FROM tblProductPrices
    )
    SELECT dateUpdated FROM cte 
    ORDER BY dateUpdated DESC