我们县最近购买了一个新的房地产系统。我创建了一个连接十几个表的视图。 (评估,纳税人,托收等)
每个表都有最后更改数据和最后更改用户字段。
我们想知道包裹号码在系统中的最后一次更改以及什么登录进行了这些更改。
我能够通过使用以下嵌套查询来提取最新的更改数据...
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。
查询可以重写为:
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)