我如何 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
我对 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