在指定时间获取所有数据并在 T-SQL 中列出所有此交易

Get all data in specified time and list all this transaction too in T-SQL

我有这个演示数据库

create database testGroupfirst22;
go

use testGroupfirst22;
go

create table testTbl 
(
    id int primary key identity,
    custnum nvarchar(50),
    transDate datetime,
    degree int 
)

insert into testTbl 
values ('ahmed', '1-1-2000', 50), ('ahmed', '1-1-2000', 500),
       ('ahmed', '2-1-2000', 660), ('ahmed', '2-1-2000', 666),
       ('ahmed', '3-1-2000', 50),
       ('ali', '1-1-2000', 5054), ('ali', '1-1-2000', 1500),
       ('ali', '1-1-2000', 66220), ('ali', '1-1-2000', 6656),
       ('ali', '1-1-2000', 540),
       ('hasan', '1-1-2000', 50), ('hasan', '1-1-2000', 50),
       ('hasan', '1-1-2000', 500), ('hasan', '1-1-2000', 660),
       ('hasan', '1-1-2000', 666), ('hasan', '1-1-2000', 50)

这是输出

我写这段代码是为了获取指定时间内超过 1950 的所有交易 它是这样工作的

select 
    custnum, sum(degree) as [all transaction] 
from 
    testTbl
where 
    transdate between '1-1-2000' and '3-1-2000' 
group by 
    custnum
having 
    sum(degree) > 2000

输出:

但我需要用相同的代码列出所有这些交易及其历史记录 像这样

我相信使用子查询可能会发生这种情况,但我认为使用它存在性能问题,我发现许多问题建议使用交叉应用和其他 window - 排名但我不熟悉通过这些方式,我陷入了这个查询,我还无法找到赖特解决方案。

我一秒钟都不相信将其推入子查询会导致性能问题。

类似

SELECT *
FROM testTbl
WHERE custnum IN
    (
        SELECT custnum
        FROM testTbl
        WHERE transdate BETWEEN '1-1-2000'  AND '3-1-2000'
        GROUP BY custnum
        HAVING sum(degree) > 2000
    )

custnum 上的索引,你在这里应该没问题。