从视图中的一组表中获取最新日期列的值

时间:2012-08-30 11:10:28

标签: sql sql-server sql-view

假设我有一个名为vProducts

的视图

vProductstblProducts, tblCategories, tblProductPrices

中选择数据

这3个表中的每一个都有一个名为dateUpdated的{​​{1}}类型的列。

在我看来,我想要一个名为DateTime

的专栏

这应该是dateUpdateddateUpdatedtblProductstblCategories的最新内容。

这可能吗?

2 个答案:

答案 0 :(得分:2)

您总是可以使用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作为值)

答案 1 :(得分:0)

使用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