Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 仅选择按运行日期上载的最新记录_Sql Server_Tsql - Fatal编程技术网

Sql server 仅选择按运行日期上载的最新记录

Sql server 仅选择按运行日期上载的最新记录,sql-server,tsql,Sql Server,Tsql,我正在处理这样一个场景:我每天和每周上传记录。 编写基于运行日期仅选择这些记录中最多行的SQL语句的最佳方法是什么 这不是我想要的: SELECT * FROM dbo.Table WHERE rundate = (SELECT MAX(rundate) from dbo.Table) 我还需要过去运行日期中的行,但只需要最近的一行。我遇到的问题是,他们可能会更改小时数/支付代码等。我只需要最新的记录,以及基于paydate和rundate的过去最新记录,如果这有意义的话。请参见下

我正在处理这样一个场景:我每天和每周上传记录。 编写基于运行日期仅选择这些记录中最多行的SQL语句的最佳方法是什么

这不是我想要的:

  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的最新金额。不确定哪种方法是最好的。也许是模糊的时间匹配?请阅读一些改进问题的技巧。完美的答案!这正是我想要的——简短、甜美,再加上易于理解。你真的是一个全面的好人。非常感谢你。