2016-04-28 4 views
2

基本的に、このクエリは、ユーザーがアプリケーションにログオンする時間を計算することを想定しています。それはおそらく単純なものですが、私はただ今それを把握することはできません。私が抱えている問題は、時には1人または2人のユーザーが意味をなさない時代を迎えることです。そのような1人のユーザーは23分を1日とし、次はそれほど同じでなければなりません。なぜこのSQLクエリが計算時間を返しますか?

例データ:

+----------------+----------+ 
| ava_modifiedby | Time | 
+----------------+----------+ 
| RSCHIFFELBEIN | 20:22:08 | 
| TMORRIS  | 13:41:57 | 
| TATKINS  | 13:23:01 | 
| MATTECH1  | 07:59:49 | 
| R5    | 07:02:23 | 
+----------------+----------+ 


SELECT DISTINCT 
    A.ava_modifiedby, 
    CONVERT(VARCHAR, DATEADD(ss, ((SUM(DATEPART(hh, A.ava_changed) * 3600 + DATEPART(mi, A.ava_changed) * 60 + DATEPART(ss, A.ava_changed)) - SUM(DATEPART(hh, B.ava_changed) * 3600 + DATEPART(mi, B.ava_changed) * 60 + DATEPART(ss, B.ava_changed))) % 86400), 0), 108) AS TIME 
FROM R5AUDVALUES A 
LEFT OUTER JOIN R5AUDVALUES B ON A.ava_primaryid = B.ava_primaryid 
WHERE A.ava_table = 'R5SESSIONS' 
    AND A.ava_deleted = '+' 
    AND A.ava_to IS NULL 
    AND B.ava_table = 'R5SESSIONS' 
    AND B.ava_inserted = '+' 
    AND B.ava_from IS NULL 
    AND A.ava_modifiedby <> '*' 
    AND B.ava_modifiedby <> '*' 
GROUP BY A.ava_modifiedby 
+0

を働くだろうと思い、私たちに奇数判定とスキーマといくつかのサンプルデータを表示してくださいあなたは – n8wrl

+0

と書いてありますが、私は今サンプルデータを見ていますが、ログインした時間をどこで決めるのか分かりません。 – n8wrl

+0

これは私が経験したことのないデータベースなので、私は彼らが別のソースからそれを引っ張ったと確信しています、そして、このクエリは合計時間を解決します。 –

答えて

1

をそれが言うのは難しいのですが、私はこのような何かが

SELECT DISTINCT 
A.ava_modifiedby, CONVERT(varchar, DATEADD(ss, 
DateDiff(ss, a.ava_changed, b.ava_changed), 0), 108) AS TIME 
FROM R5AUDVALUES A 
LEFT OUTER JOIN R5AUDVALUES B ON A.ava_primaryid = B.ava_primaryid 
WHERE A.ava_table = 'R5SESSIONS' 
    AND A.ava_deleted = '+' 
    AND A.ava_to IS NULL 
    AND B.ava_table = 'R5SESSIONS' 
    AND B.ava_inserted = '+' 
    AND B.ava_from IS NULL 
    AND A.ava_modifiedby <> '*' 
    AND B.ava_modifiedby <> '*' 
GROUP BY A.ava_modifiedby 
+0

これは機能しました! DATEDIFFは私が使用すべきものでした。ありがとう! –

1

あなたは、あなたがやっているすべての数学であなたの問題を複雑に超えています。 DATEDIFFmi間隔は、2つのDateTimes間の合計時間を示します。あなたのテーブルからあなたの実際の行の例を見ることなく、

DATEDIFF(mi,A.ava_changed,B.ava_changed) 
関連する問題