2012-01-10 14 views
0

SQL Server 2008を使用して、2回の間に発生したタイムスパンを秒単位で計算します。TSQL - クエリの日付計算を計算し、値を設定しますか?

開始日は、特定のIDが存在する(フィルタが真である)最後の出現のタイムスタンプで、そのタイムスタンプレコードから時刻を取得し、現在の処理時間と戻り値に対してDATEDIFF()を実行します@LastEventTimespanという値を秒単位で返します。

DECLARE @CurrentProcessTime DATETIME 
DECLARE @LastEventTimespan DATETIME 
SET @CurrentProcessTime = GetDate() 

-- find the timespan since the last session event 
-- DATEDIFF (datepart , startdate , enddate) 

SELECT MAX(PageVisitEventID) AS LastPageVisitEventID, @LastEventTimespan = DATEDIFF(second , DateAdded , @CurrentProcessTime) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
GROUP BY LastPageVisitEventID 

私はそれに応じてフィルタおよびプロセスのMAX IDを取得しますが、@LastEventTimespanを設定することができませんでした、しかし、データ検索を行う際に値を代入しようとすると、ノーノーではありません考え出し。

どうすればこの問題を回避できますか?

ありがとうございました。

+2

質問は間違っています。申し訳ありません。 @LastEventTimespanで何をする予定ですか? GROUP BYのために複数の行があることを考えれば、それは行のどれでも許されていない可能性もあるので意味がありません。ただし、行単位で計算する場合は、GROUP BYを使用する必要があります。とにかくあなたのMAXedカラムでGROUP BYを実行しないと、状況が悪くなります – gbn

答えて

3

私はこのようなものが欲しいと思います。

DECLARE @LastEventTimespan INT 

SELECT TOP 1 @LastEventTimespan = DATEDIFF(SECOND, DateAdded, GETDATE()) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
ORDER BY PageVisitEventID DESC 

これは、特定のユーザーと現在のDateTimeのためPageVisitEventIDの最高値のためDateAdded間の秒の違いを計算します。私はのデータタイプをINTに変更しました。これはおそらく秒を扱うときに意味があるからです。

1

あなたはこの1でSELECT文を置き換えることができます。

SELECT TOP 1 
    @LastEventTimespan = DATEDIFF(second , DateAdded , @CurrentProcessTime) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
ORDER BY PageVisitEventID desc 

私はこのようなクエリを何度も行われ、決して問題を持っていました。

+2

@gbn:あなたが正しいです、私はIdフィールドの検索を取り除きます。情報をありがとう。 – GolfWolf