2016-04-18 18 views
0

私はMinDateとMaxDateの間の行を取得するストアドプロシージャを持っています。日付間の行の値を取得する方法は?

ALTER PROCEDURE [dbo].[GetFilteredDomainDetails] 
    @Id bigint, 
    @From datetime2, 
    @To datetime2 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     DomainId, [Date], DomainName, 
     ServerPerformance, DatabasePerformance, SoldTickets 
    FROM 
     DomainDetailDataHistory 
    WHERE 
     DomainId = @Id AND Date >= @From AND date <[email protected] 
    ORDER BY 
     date ASC 
END 

事は、私が行の間のチケット販売量を算出していますということです。

for (int i = databaseData.Count() - 1; i > 0; i--) 
    { 
     long soldtickets = databaseData[i].SoldTickets - databaseData[i - 1].SoldTickets; 
     databaseData[i].SoldTickets = soldtickets < 0 ? databaseData[i].SoldTickets : soldtickets; 
    } 

問題:

私が持っているが、私はMinDateプロパティの下にある1つの余分の行が必要なことです正しいチケットの計算を得るために。

SELECT TOP 1 
    DomainId, [Date], DomainName, 
    ServerPerformance, DatabasePerformance, SoldTickets 
FROM 
    DomainDetailDataHistory 
WHERE 
    [Date] > @From AND DomainId = @Id 
ORDER BY 
    date ASC 

を、サーバー上の二次select文としてこれを受け取る:

私はこれを行うことができます。

しかし私はそれが私が探しているものを達成するためのきれいな方法ではないと感じ、より良い方法があれば私は好奇心が強いのですか?

+0

サンプルデータと望ましい結果は、あなたが何をしようとしているかを説明するのに役立つと思います。 –

+0

私は自分自身を言葉だけで明確にすることができたと感じて以来、私はあまりデータを入れていませんでした。これの単純さは、私が最小と最大の日付の間に行を入れたいだけでなく、1つの行(最新)が私の考えを下回ることです。それを達成するための実際の方法は別の問題です。 データも追加します。 – ThunD3eR

答えて

0

のために、このようにコードを変更することができます

DECLARE @Temp TABLE(DomainId bigint,[Date] datetime2,DomainName varchar(max), ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint) 

INSERT INTO @Temp 
      SELECT TOP 1 DomainId, [Date],DomainName, ServerPerformance, DatabasePerformance, SoldTickets FROM DomainDetailDataHistory 
      WHERE DomainId = @Id AND Date < @From 
      order by date DESC 

SELECT * FROM @Temp 

SELECT h.DomainId, h.[Date], h.DomainName, h.ServerPerformance, h.DatabasePerformance, h.SoldTickets 
FROM DomainDetailDataHistory h 
JOIN @Temp T ON T.DomainId = h.DomainId 
WHERE h.DomainId = @Id AND h.[Date] >= T.[Date] AND h.[date] <[email protected] 
order by date asc 
-1

あなたは、私が1つの選択なステートメントで私にこれを得ることができる何かを探していますが、これはちょうどので、私はベントそれを把握するtimeconsumingになることを実現した、より良い実行SELECT DomainId, [Date],DomainName, ServerPerformance, DatabasePerformance, SoldTickets FROM DomainDetailDataHistory WHERE DomainId = @Id AND Date between @From AND @To order by date asc

関連する問題