我如何 select table 中每个人的最大约会

How do I select a max date by person in a table

我对 SSRS/SQL 查询不太了解,需要编写一份报告,按人员提取百分比分配,然后与工资进行比较 table 以分配工资。这些分配每季度更改一次,但所有分配继续存储在 table 中。如果一个人的分配没有改变,他们就不会在 table 中获得新条目。这是一个名为分配的示例 table。

名字 姓氏 日期 面积 百分比
史密斯 鲍勃 01/01/20 一个 50.00
史密斯 鲍勃 01/01/20 B 50.00
母鹿 01/01/20 一个 25.00
母鹿 01/01/20 B 25.00
母鹿 01/01/20 C 50.00
母鹿 20 年 4 月 1 日 一个 35.00
母鹿 20 年 4 月 1 日 C 65.00
韦恩 布鲁斯 01/01/20 一个 100.00
韦恩 布鲁斯 20 年 4 月 1 日 B 100.00

我想从这个示例 table 查询时得到的结果是:

名字 姓氏 日期 面积 百分比
史密斯 鲍勃 01/01/20 一个 50.00
史密斯 鲍勃 01/01/20 B 50.00
母鹿 20 年 4 月 1 日 一个 35.00
母鹿 20 年 4 月 1 日 C 65.00
韦恩 布鲁斯 20 年 4 月 1 日 B 100.00

但是,我还想通过将其与用户输入的日期进行比较来提取它,以便他们可以在任何时间点 运行 此报告并获得正确的“最大”日期。因此,例如,如果这里还有 7/1/20 日期,但用户输入日期是 6/30/20,我不想提取 7/1/20 数据。换句话说,我想按名称 w/o 超过用户输入的日期来提取最大日期的行。

关于完成此任务的最佳方法有什么想法吗?

提前感谢您提供的任何建议。

在 SQL 中,ROW_NUMBER 可用于按特定字段对记录进行分组排序。

SELECT * FROM (
SELECT *, ROW_NUMBER()OVER(PARTITION BY Last_Name, First_Name ORDER BY DATE DESC) as ROW_NUM 
FROM TABLE
) AS T
WHERE ROW_NUM = 1

然后过滤 ROW_NUM = 1

不过,我注意到有一对情侣的约会日期相同,而你两个都想要。在这种情况下,您会想要使用 RANK - 它允许联系,因此可能有多个记录具有您想要捕获的相同日期。

SELECT * FROM (
SELECT *, RANK()OVER(PARTITION BY Last_Name, First_Name ORDER BY DATE DESC) as ROW_NUM 
FROM TABLE
) AS T
WHERE ROW_NUM = 1