Sql server 仅选择按运行日期上载的最新记录
我正在处理这样一个场景:我每天和每周上传记录。 编写基于运行日期仅选择这些记录中最多行的SQL语句的最佳方法是什么 这不是我想要的:Sql server 仅选择按运行日期上载的最新记录,sql-server,tsql,Sql Server,Tsql,我正在处理这样一个场景:我每天和每周上传记录。 编写基于运行日期仅选择这些记录中最多行的SQL语句的最佳方法是什么 这不是我想要的: SELECT * FROM dbo.Table WHERE rundate = (SELECT MAX(rundate) from dbo.Table) 我还需要过去运行日期中的行,但只需要最近的一行。我遇到的问题是,他们可能会更改小时数/支付代码等。我只需要最新的记录,以及基于paydate和rundate的过去最新记录,如果这有意义的话。请参见下
SELECT *
FROM dbo.Table
WHERE rundate = (SELECT MAX(rundate) from dbo.Table)
我还需要过去运行日期中的行,但只需要最近的一行。我遇到的问题是,他们可能会更改小时数/支付代码等。我只需要最新的记录,以及基于paydate和rundate的过去最新记录,如果这有意义的话。请参见下面的示例:
除此之外,还可以根据相同的标准删除那些较旧的记录。有人能帮我照一下吗?@iCosmin,
这会让您了解您的目标:
SELECT *
FROM (
SELECT
MostRecent = ROW_NUMBER() OVER (PARTITION BY Last_Name,First_Name,Position_ID,PayDate ORDER BY RunDate DESC), *
FROM dbo.table
) AS A
WHERE A.MostRecent = 1
积分查询:
DELETE t
FROM dbo.table t
JOIN ( SELECT
MostRecent = ROW_NUMBER() OVER (PARTITION BY Last_Name,First_Name,Position_ID,PayDate ORDER BY RunDate DESC), *
FROM dbo.table
) AS a ON t.Last_Name = a.Last_Name AND t.First_Name = a.First_Name and t.Position_ID = a.Position_ID AND t.PayDate = a.PayDate AND t.RunDate = a.RunDate
WHERE a.MostRecent <> 1
你可以用一个分区来完成这项工作,然后按rundate desc进行排序。这个链接将带你到达:Sound good@briskovich。你能告诉我怎么做吗?我不太擅长sql。数字不匹配。没有839。描述一下规则。@papazanzon好吧,它们不应该匹配,因为有人可以同时更新它们。我只需要基于paydate和rundate的最新金额。不确定哪种方法是最好的。也许是模糊的时间匹配?请阅读一些改进问题的技巧。完美的答案!这正是我想要的——简短、甜美,再加上易于理解。你真的是一个全面的好人。非常感谢你。