如何在表格中按人员选择最大日期

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

名字 姓氏 日期 区域 百分比
史密斯 鲍勃 01/01/20 A 50.00
史密斯 鲍勃 01/01/20 B 50.00
Doe 01/01/20 A 25.00
Doe 01/01/20 B 25.00
Doe 01/01/20 C 50.00
Doe 04/01/20 A 35.00
Doe 04/01/20 C 65.00
韦恩 布鲁斯 01/01/20 A 100.00
韦恩 布鲁斯 04/01/20 B 100.00

查询时我希望从这个示例表中得到的结果是:

名字 姓氏 日期 区域 百分比
史密斯 鲍勃 01/01/20 A 50.00
史密斯 鲍勃 01/01/20 B 50.00
Doe 04/01/20 A 35.00
Doe 04/01/20 C 65.00
韦恩 布鲁斯 04/01/20 B 100.00

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

您知道实现此目标的最佳方法吗?

预先感谢您提供的任何建议。

hnxxck 回答:如何在表格中按人员选择最大日期

在 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

enter image description here

本文链接:https://www.f2er.com/71758.html

大家都在问