2012-03-22 22 views
1

私はそれが実行可能かどうかわからない何かをしようとしています。私はこのクエリがあります2つの日付のSQLクエリの日付の差

SELECT [CreatedOn]

printscreen

あなたが画像で見ることができるように

[MyTableという] FROMを、異なる日付があります。今私が達成したいのは、各行の各日時の時間差を取得することです。たとえば、行1と行2、次に行2と行3などの日付間の差異... これは可能ですか? おかげで、あなたのデータにアクセスするためにC#を使用していると仮定すると、Laziale

+2

LEADとLAG関数はこれを行うことができますDateDiff関数を取得するために、次の行に外部結合行番号とのCTEを作成することができます。 – Randy

+0

@Randy:ただし、SQLServer 2012がリリースされるまで待つ必要があります。 – a1ex07

答えて

3
;WITH q AS (
SELECT 
    CreatedOn, 
    ROW_NUMBER() OVER (ORDER BY CreatedOn) AS rn 
FROM 
    MyTable 
) 
SELECT 
    q1.CreatedOn AS Date, 
    q2.CreatedOn AS NextDate, 
    DATEDIFF(SECOND, q1.CreatedOn, q2.CreatedOn) AS SecondDiff 
FROM 
    q q1 JOIN 
    q q2 ON q1.rn + 1 = q2.rn 
+0

+1笑私はあなたを打ち負かす – dotjoe

0

は、良い参照がここにあります:http://msdn.microsoft.com/en-us/library/aa287590(v=vs.71).aspx

基本的に、コードは、あなたが使用するすべての.NET言語をサポートする必要があり

DateTime oldDate = new DateTime(2002,7,15); 
DateTime newDate = DateTime.Now; 
// Difference in days, hours, and minutes. 
TimeSpan ts = newDate - oldDate; 
// Difference in days. 
int differenceInDays = ts.Days; 

ですこれに似た何か。私は何度もPythonで同じことをしてきました。

0

構文が間違っているかもしれないDATEDIFF MSDN Datediff

それとも

cast((date1-date2) as varchar(255)) 

を試してみて、私は現時点ではそれを確認することはできません。

4

その後、

;with t as (
    SELECT 
     [CreatedOn], 
     rn = row_number() over(order by [CreatedOn]) 
    FROM 
     [MyTable] 
) 

select 
    t.[CreatedOn], 
    secondsTilNext = datediff(s, t.[CreatedOn], tnext.[CreatedOn]) 
from 
    t 
    left outer join t tnext on tnext.rn = t.rn + 1 
+0

sは何を表していますか?私はここでエラーが発生しています:http://gyazo.com/a88835cb955dedd5785b9a3b833717e1 – Laziale

+0

+1私にそれを打つために。 –

+0

@Laziale 's'は秒を表します...あなたの2つの日付の間の秒数を与えます。 'select'に' t。[CreatedOn] 'の後に'、 'が必要なので、このエラーが発生しています。 –