在指定时间获取所有数据并在 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 上的索引,你在这里应该没问题。
我有这个演示数据库
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 上的索引,你在这里应该没问题。