我正在努力寻找符合条件的第一次约会。所以逻辑如下:
use
[AdventureWorksDW2012]
go
;WITH sales AS (
select d.OrderDateKey,
SalesAmount = SUM(d.SalesAmount)
from [dbo].[FactInternetSales] d
group by d.OrderDateKey
having SUM(d.SalesAmount)>10000
)
select FirstOrderDateKey = MIN(OrderDateKey)
from sales
唯一的问题是,我的数据太复杂,太大,无法计算每个日期的值,然后选择满足条件时的最小日期。当互联网销售额超过10000时,有没有找到第一个约会的快捷方式?是否需要某种循环?
答案 0 :(得分:2)
你也可以用单一陈述来做。如果您在orderdatekey上有适当的索引,则可以使用此方法提高性能。
select MIN(s.OrderDateKey) as FirstOrderDateKey
from [dbo].[FactInternetSales] d
group by d.OrderDateKey
having SUM(d.SalesAmount)>10000
答案 1 :(得分:0)
SELECT TOP 1
d.OrderDateKey
,S.RunningTotal
FROM [dbo].[FactInternetSales] d
CROSS APPLY ( SELECT SUM(SalesAmount) AS RunningTotal
FROM [dbo].[FactInternetSales]
WHERE OrderDateKey <= d.OrderDateKey
) S
WHERE S.RunningTotal < -- Condition
ORDER BY d.OrderDateKey DESC