【发布时间】:2014-11-14 20:40:09
【问题描述】:
我有一个 CRM 数据库,其中包含主表列 createon (date) 和 createat (time)。我们称之为A表
有一个辅助表用于记录有关尝试联系在 A 中创建的记录的活动的数据,我们将此表称为 B。
我正在尝试编写一个 tSQL 查询,该查询将显示在 A 中创建记录与在 B 中记录第一个活动之间的平均时间。
这是我目前所拥有的:
SELECT
B.userid,
avg(cast(datediff(MINUTE, A.createat, B.ontime) as float))
AS 'AVG TIME FROM LEAD CREATION TO FIRST LOGGED ACTIVITY'
FROM
TableA A, TableB B
WHERE
A.KEY_value = B.KEY_value
AND B.USERID in ('USER1','USER2','USER3','USER4','USER5')
AND B.ONDATE > '09/01/2014'
GROUP BY
B.USERID
HAVING
B.ontime = min(B.ontime)
如果我删除 'have' 子句,查询将起作用,但我不能确定我是否获得了表 B 中第一个记录活动的时间 (min(B.ontime))
我仍然是 SQL 新手,因此我们将不胜感激任何帮助/指导!
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它 -
@marc_s 很高兴知道。谢谢。
-
@marc_s:被谁气馁?
-
所有喜欢让查询易于理解的人。
-
使用 ANSI 联接有几个原因:可移植性、对联接与过滤的更精细控制、使用多个外部联接时的歧义性更小以及使用 UNION 联接的能力。
标签: sql sql-server tsql average