SQL Server-在最后一个编辑日期最近的多个联接表上选择一个通用名称的列

问题描述 投票:1回答:1

我们县最近购买了一个新的房地产系统。我创建了一个连接十几个表的视图。 (评估,纳税人,托收等)

每个表都有最后更改数据和最后更改用户字段。

我们想知道包裹号码在系统中的最后一次更改以及什么登录进行了这些更改。

我能够通过使用以下嵌套查询来提取最新的更改数据...

SELECT 
    ... ,
    (SELECT MAX(v) 
     FROM (VALUES (table1.last_chg_datetime), (table2.last_chg_datetime), 
                  (table3.last_chg_datetime), (table4.last_chg_datetime), ... , 
                  (tableN.last_chg_datetime)) AS value(v)) AS last_chg_datetime 
FROM table1 
LEFT OUTER JOIN table2 ...

从与上次更改的日期对应的表中拉出上次更改的用户的最佳方法是什么?

我确信这可以通过存储过程来完成。我只是想知道是否也可以通过更改嵌套查询来提取?

我们正在运行SQL Server 2016。

sql-server
1个回答
2
投票

查询可以重写为:

SELECT  ... ,sub. *
FROM table1 
LEFT OUTER JOIN table2 ...
OUTER APPLY (SELECT TOP 1 * 
     FROM (VALUES (table1.last_chg_datetime, table1.user), (table2.last_chg_datetime, table2.user), 
                  (table3.last_chg_datetime, table3.user), (table4.last_chg_datetime, table4.user), ... , 
                  (tableN.last_chg_datetime, tableN.user)) AS value(v, user_name)
    ORDER BY v DESC
   ) sub;

也可以通过表名扩展:

(VALUES ('table1', table1.last_chg_datetime, table1.user), 
        ('table2', table2.last_chg_datetime, table2.user), ...
) AS value(table_name, v, user_name)
© www.soinside.com 2019 - 2024. All rights reserved.