【发布时间】:2018-08-30 08:59:20
【问题描述】:
我正在为 SQL 查询而苦苦挣扎,虽然我查看了许多类似的答案,但没有一个非常适合我的情况。我有一个数据集如下:
Date1 Amount 1 Index Date2 Type Supplier
31/03/2018 410000.00 17 16/04/2018 06:27 102 A
31/03/2018 410000.00 17 16/04/2018 06:31 102 B
31/03/2018 400000.00 2 16/04/2018 06:37 102 A
31/03/2018 400000.00 2 16/04/2018 06:38 102 B
30/06/2018 0 20 04/07/2018 08:23 202 A
30/06/2018 0 20 04/07/2018 08:23 202 B
30/06/2018 412000.00 20 06/07/2018 12:46 102 A
30/06/2018 412000.00 20 06/07/2018 12:47 102 B
30/06/2018 442000.00 100 16/07/2018 06:27 102 A
30/06/2018 442000.00 100 16/07/2018 06:31 102 B
对于有多个具有相同类型的行的每个 Date1,我只想要索引与最大 Date2 的索引匹配的行,所以我想要这个输出:
Date1 Amount 1 Index Date2 Type Supplier
31/03/2018 400000.00 2 16/04/2018 06:37 102 A
31/03/2018 400000.00 2 16/04/2018 06:38 102 B
30/06/2018 0 20 04/07/2018 08:23 202 A
30/06/2018 0 20 04/07/2018 08:23 202 B
30/06/2018 442000.00 100 16/07/2018 06:27 102 A
30/06/2018 442000.00 100 16/07/2018 06:31 102 B
我觉得使用某种形式的条件 MAX() OVER (PARTITION BY) 应该是可能的,但对于我的一生,我无法弄清楚如何去做。
【问题讨论】:
-
无法理解您的输出.. 对于日期 31/03/2018,您的数据中有多行具有不同的 INDEX 值.. 但您的输出并未显示每个索引值
-
这正是重点 - 我想排除索引值与该 Date1 列的最大 Date2 的索引不匹配的行。我已经修改了 3 月份的数字以使其更清晰。
-
你的数据只有一列INDEX .. DATE2的索引值是多少?
-
你能说出为什么前两行被排除在外吗?只是一个例子来理解输出的逻辑
-
对于日期 31/03 和类型 102,具有最高 date2 的行具有索引 2。因此,排除具有该日期和类型且索引不是 2 的任何行。对吗?
标签: sql sql-server window-functions