我正在处理一种方案,其中每天和每周都上载记录。 编写SQL语句以根据运行日期仅选择那些记录中最多行的最佳方法是什么?
这不是我想要的:
SELECT *
FROM dbo.Table
WHERE rundate = (SELECT MAX(rundate) from dbo.Table)
我还需要过去运行日期的行,但只需要最近的行。我遇到的问题是,他们可能会更改小时数/支付代码等。我只需要根据发薪日期和运行日期获得最新记录和过去最新记录即可。请参见下面的示例:
一个不错的补充是,还可以根据相同的标准删除那些较旧的记录。有人可以给它照一下吗?
答案 0 :(得分:1)
@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