我想获取多个TableName的最后更改记录,并仅显示一次。 对于某些TableName,我有多个Table_Pk,用于exp:
SELECT COUNT(Table_PK), TableName
FROM TBL_TECTABLES INNER JOIN
sys.tables
ON 'TBL_Tec' + Table_PK = name collate SQL_Latin1_General_CP1_CI_AS
WHERE LEN(name) = 39
GROUP BY TableName
HAVING COUNT(Table_PK) > 1
结果如下:
Table_PK TableName
9 L0L001T03
2 L0L001T05
....
我想按LastChanged的命令获取Table_Pk,TableName。
这是我尝试过的代码,但我得到了所有记录
SELECT Distinct(Table_PK), TableName, LastChanged
FROM TBL_TECTABLES INNER JOIN
sys.tables
ON 'TBL_Tec' + Table_PK = name collate SQL_Latin1_General_CP1_CI_AS
WHERE LEN(name) = 39
ORDER BY LastChanged
结果是:
Table_Pk TableName LastChanged
91A5249DB797FF4BB44579AC7D3C0949 L0L003T41 2019-05-29
7070D39FAF65674DA8537B93FFDE2371 L0L003T41 2019-05-28
......
我应该有1153行,但我有2220行
答案 0 :(得分:1)
如果只希望每个表名最新记录,则可以对表名使用窗口函数分区:
R3
我添加了表别名,但不得不猜测列的来源。您可能需要调整表别名。
答案 1 :(得分:0)
我猜你需要下面的查询:
SELECT * from (
SELECT Table_PK, TableName, LastChanged, row_numbeR() over(partition by table_pk order by lastchanged desc) as RN FROM TBL_TECTABLES
INNER JOIN sys.tables ON 'TBL_Tec' + Table_PK = name
collate SQL_Latin1_General_CP1_CI_AS WHERE LEN(name) = 39 ) a Where RN = 1