gpt4 book ai didi

sql - 带条件的 T-SQL OVER/PARTITION BY 查询

转载 作者:行者123 更新时间:2023-12-02 09:11:08 24 4
gpt4 key购买 nike

我正在为 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) 应该是可能的,但对于我来说,我不知道该怎么做。

最佳答案

使用LAST_VALUE (Transact-SQL)分析函数与子查询一起使用。

下面的工作示例是针对 Oracle 的(我更喜欢 Oracle,因为我在 SQLServer 上转换日期总是有问题),但是查询的想法是一样的,语法也是一样的:

演示:http://www.sqlfiddle.com/#!4/004ce7/19

SELECT * FROM (
SELECT t.* ,
last_value( "INDEX" ) OVER
( partition by date1, "TYPE" order by date2
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) xx
FROM table1 t
) x
WHERE xx = "INDEX"
ORDER BY date1;

|                DATE1 | AMOUNT1 | INDEX |                 DATE2 | TYPE | SUPPLIER |  XX |
|----------------------|---------|-------|-----------------------|------|----------|-----|
| 2018-03-31T00:00:00Z | 400000 | 2 | 2018-04-16 06:37:00.0 | 102 | A | 2 |
| 2018-03-31T00:00:00Z | 400000 | 2 | 2018-04-16 06:38:00.0 | 102 | B | 2 |
| 2018-06-30T00:00:00Z | 442000 | 100 | 2018-07-16 06:27:00.0 | 102 | A | 100 |
| 2018-06-30T00:00:00Z | 442000 | 100 | 2018-07-16 06:31:00.0 | 102 | B | 100 |
| 2018-06-30T00:00:00Z | 0 | 20 | 2018-07-04 08:23:00.0 | 202 | B | 20 |
| 2018-06-30T00:00:00Z | 0 | 20 | 2018-07-04 08:23:00.0 | 202 | A | 20 |

关于sql - 带条件的 T-SQL OVER/PARTITION BY 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com