【发布时间】:2020-06-12 15:48:18
【问题描述】:
我不知道如何正确命名问题,但这里是示例数据:
CREATE TABLE dbo.test_data
(
row_version VARBINARY(8)
, account_number CHAR(8)
, account_balance DECIMAL(10, 2)
, group_rank BIGINT
, rownum BIGINT
);
INSERT INTO dbo.test_data
VALUES (0x000000000013fd24, '46436663', 123.00, 4, 86)
, (0x000000000013fd23, '46436663', 123.00, 4, 86)
, (0x000000000013fd22, '46436663', 123.00, 4, 85)
, (0x000000000013fd21, '46436663', 123.00, 4, 85)
, (0x000000000013fd20, '46436663', 123.00, 4, 83)
, (0x000000000013fd1f, '46436663', 555.00, 2, 83)
, (0x000000000013fd21, '46436663', 123.00, 4, 85)
, (0x000000000013fd20, '46436663', 123.00, 4, 83)
, (0x000000000013fd21, '46436663', 123.00, 4, 85)
, (0x000000000013fd20, '46436663', 123.00, 4, 83)
, (0x000000000013fd1e, '46436664', 12345.00, 5, 82)
, (0x000000000013fd1d, '46436664', 12345.00, 5, 82)
, (0x000000000013fd1c, '46436664', 12345.00, 5, 82)
, (0x000000000013fd1b, '46436664', 12345.00, 5, 81)
, (0x000000000013fd1a, '46436664', 12345.00, 5, 81)
, (0x000000000013fd19, '46436664', 12345.00, 5, 78)
, (0x000000000013fcb3, '46436664', 123.00, 6, 77)
, (0x000000000013fcb2, '46436664', 123.00, 6, 77)
, (0x000000000013fcb1, '46436664', 123.00, 6, 76)
, (0x000000000013fcb0, '46436664', 123.00, 6, 76);
这是数据的样子:
SELECT * FROM dbo.test_data
ORDER BY row_version DESC
这里的 1 和 4(蓝色)是连续的组号,它们的最小序列为 2 个相同的值,您可以通过 row_version 订购它们。我需要找到不同group_rank(2,红色)的第一次出现,然后检查rownum值(3,6,紫色)在哪里是MIN(row_num)上组(蓝色)和row_num的记录就在小组结束之前(红色)。如果这些值相差 1,那么我需要 account_number 然后我需要返回它,否则 - 我不需要返回它。
我对帐户低于 2 分和 5 分(红色)的情况不感兴趣。
因此,通过查看该数据,应返回唯一帐户 - 46436664 与 46436663 rownum 值相同 (83)。
【问题讨论】:
-
那么,你在这里究竟得到了什么结果?
-
我不适合你。如果您在谈论预期结果,那么它是 46436664
-
所以您的预期结果是只是值
46436664?没有别的吗? -
是的,只是单身
标签: sql-server window-functions sql-server-2017