满足某些条件的第一个日期

时间:2014-10-31 16:05:09

标签: sql sql-server tsql

我正在努力寻找符合条件的第一次约会。所以逻辑如下:

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时,有没有找到第一个约会的快捷方式?是否需要某种循环?

2 个答案:

答案 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