基本上,此查询用于计算用户登录应用程序的时间(以分钟为单位)。它可能很简单,但我现在无法掌握它。我遇到的问题是,有时我们的一两个用户会有时间没有意义。这样一个用户一天会有23分钟,而下一个用户则应该大约相同。
示例数据:
+----------------+----------+
| 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 :(得分:1)
你正在用你所做的所有数学运算使你的问题复杂化。带有 mi 间隔的 DATEDIFF 会为您提供两个日期时间之间的总分钟数。
DATEDIFF(mi,A.ava_changed,B.ava_changed)
答案 1 :(得分: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