2017-09-22 8 views
0

私は以下の問題を解決したいと思います。AZURE T-SQLの計算結果が新しいVIEWに出力されます

表は列TIMEINを持っていると私は列TIMEOUTを追加したい次のTIMEINが接近している場合を除き、これはTIMEINプラス60秒の値を取る必要があります。

ので:

ID PROJECTCODE TIMEIN TIMEOUT 
---------------------------------- 
1 25847  35  79 = less as 60 seconds in between 35(id1) and 80(id2) 
2 25847  80  140 = more as 60 seconds in between 80(id2) and 158(id3) 
3 25847  158  218 = 60 added because there is no bigger time as 158sec. 
4 25847  35  79 = less as 60 seconds in between 35(id1) and 80(id2) 

重要知るには、IDのは、フォローアップしていないということです、そして同様に2倍以上の同じ時間がある可能性があります。どうすればいい?私が従うことができる良いアイデアやドキュメント?

+5

どのDBMSを使用していますか? (例:SQL Server、MySQL、Oracle) –

+2

[so]はフリーコード作成サービスではありません。 **あなた自身でコードを書くことを試みることが期待されます**。 [もっと研究をして](http://meta.stackoverflow.com/questions/261592)問題がある場合は**あなたが試したことを投稿することができます** **動作していないことの明確な説明**を提供し、** [mcve] **を提供します。私は良い質問と[完璧な質問]を読むことをお勧めします(http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。また、[ツアー]も必ず行ってください。 – Igor

+0

はい、私はそれを知っています。何度も何度もやったことがあります。あなたにそれを書かないように頼んでいますが、「いいアイデアやドキュメンテーションを読むことができますか?だから私は出発点を得た。 –

答えて

3

LEAD()を使用して次の行の値にアクセスし、次にCASEステートメントを使用して、60秒を使用するかどうかを判断できます。このような何か:

SELECT ID, 
     PROJECTCODE, 
     TIMEIN, 
     CASE WHEN LEAD(TIMEIN) OVER (ORDER BY ID) - TIMEIN < 60 
      THEN LEAD(TIMEIN) OVER (ORDER BY ID) - 1 
      ELSE TIMEIN + 60 
     END AS TIMEOUT 
FROM TimesTable 

PARTITION BY PROJECTCODEを追加する必要があるかもしれませんが、それはサンプルデータから不明です。

+0

あなたがアーロンに感謝してくれました。 –

+0

@EwaldBos:これで助けたら答えを受けてください。 – TheGameiswar

+0

ごめんなさい –

関連する問題