2016-04-28 8 views
0

コンピュータで実行されるステップのリストを返すMS SQLクエリがあります。各ステップが実行されるまでに順序付けられたステップ番号があります。私の問題は、ステップが繰り返されることがあることですが、ステップ1-> nの最後のシーケンスを返すだけです。だから私はステップ1で最後の行を取って、その行と後のものだけを返したいと思います。MS SQL Nの最後のインスタンスの後のすべての行を返します

SELECT Time,Step FROM Table1 
WHERE Computer = 'ComputerName' 
AND Step IS NOT NULL 
ORDER BY Time 

情報は... Nとだけ返し>

Time Step 
00:01 1 
00:02 2 
00:03 3 
00:04 1 
00:05 2 
00:06 3 
00:07 4 

は私がステップ1-最後のシーケンスの前に、すべてを無視したいです...

Time Step 
00:04 1 
00:05 2 
00:06 3 
00:07 4 

手順を返さ常に1から始まりますが、ステップ数はさまざまです。数または反復はまた、何らの回数でも何回でも変わり得る。

ご協力いただければ幸いです。あなたはサブクエリを必要とし、参加しません

おかげ

答えて

2

はMAX(タイム)は私のアイデアを与えたと私はそれを考え出したと考えています。最新のステップ1が実行された後にすべてを取得するには、WHEREステートメントを使用するだけです。

SELECT Time,Step FROM Table1 
WHERE Computer = 'Computer1' 
AND Step IS NOT NULL 
AND TIME >= (SELECT MAX(Time) FROM Table1 WHERE Computer = 'Computer1' AND Step = 1) 
ORDER BY Time 
+0

これは私にとっても最も理にかなっています。 –

+0

これは元の質問に従わないものです。手順2が実行される前に手順3が実行されている場合、手順3は表示されません。 – WickedFan

+0

手順3が表示されない原因は何ですか?これにより、最新のステップ1の後に発生したものが返されます。 – APB

-1
SELECT distinct t2.time, t1.step 
FROM Table1 t1 
JOIN (Select MAX(time) time, step 
     FROM table1 
     GROUP BY step) as t2 ON t2.step = t1.step 
ORDER BY step 

ExecutionPlan

+0

サブクエリと結合は過小ですが、この小さなテーブルでは問題ありませんが、多数のステップは単純なGROUP BYとMAXよりも指数関数的に長くなります。 – AutomationNation

+0

私は思った以上に複雑に思ったかもしれません。しかし、私が信じる思考のこの列車は、質問に述べられている制限のために必要です。ステップを再開することができ、最後のオカレンスだけが必要です。 downvoteありがとう! ;) – WickedFan

1

-

SELECT MAX(Time), Step 
FROM Table 
GROUP BY Step 
+0

これはすべてのステップを返して、最後の時間が経過したようです。私が戻ってきたいのは、最後の1,2,3、などです。だから、ステップ1の最後のインスタンスを見つけようとしています。最初の実行がステップ5に行きましたが、最後のステップがステップ3に行っただけの場合、私は4と5は気にしません。 – APB

+1

私は、とにかく比較的小さなデータセットの後では問題にならない実行計画を無視して、より良い結果を期待しました。ノーマライズ。 – WickedFan

関連する問題