我有一个查询应该返回“status”--duration条目的总和。持续时间通过使用datediff计算(n,datestamp,(返回结束当前状态的日期戳记的子查询,即发现下一个配件“状态更改” - 在锁定的那个之后进入)在子查询中带有多部分标识符问题的SQL查询
我的问题是以下查询返回的多部分的标识符错误
- 的INC表给我 “INCIDENT_NUMBER”我正在寻找至极的其他表中相关 “NUMBER”
- ACTM1保存所有DATESTAMP-条目
- ACTA1与ACTM1通过“THENU” MBER”,并保存有关条目是否是一个装配状态更改或不是所有的信息
代码:
SELECT SUM(DATEDIFF(n, ACTM1.DATESTAMP, END_DATESTAMP_TABLE.END_DATESTAMP))
FROM INC LEFT OUTER JOIN
ACTM1 ON INC.INCIDENT_NUMBER = ACTM1.NUMBER LEFT OUTER JOIN
ACTA1 ON ACTM1.THENUMBER = ACTA1.THENUMBER LEFT OUTER JOIN
/**/
(SELECT ACTM1_1.NUMBER, ACTM1_1.DATESTAMP AS END_DATESTAMP
FROM ACTM1 AS ACTM1_1 LEFT OUTER JOIN
/**/
(SELECT ACTM1_1_1.NUMBER, MIN(ACTM1_1_1.THENUMBER) AS FOLLOWUP_THENUMBER
FROM ACTM1 AS ACTM1_1_1
WHERE (ACTM1_1_1.THENUMBER > /**/ ACTM1_1.THENUMBER)/*I think here lies the problem*/
AND (ACTM1_1_1.[TYPE] IN ('Open', 'Status Change', 'Resolved', 'Closed')))
AS FOLLOWUP_THENUMBER_TABLE
/**/
ON ACTM1_1.NUMBER = FOLLOWUP_THENUMBER_TABLE.NUMBER)
AS END_DATESTAMP_TABLE
/**/
ON ACTM1.NUMBER = END_DATESTAMP_TABLE.NUMBER
WHERE ...
我将是任何有帮助的评论感谢或暗示你能给我这个,
PS
其实它确实有道理。有时会有多个“适合”状态更改条目。这些条目按照时间顺序排列为“THENUMBER”......无论如何感谢您的进一步帮助。 – Per 2009-12-03 18:04:30
我不是从商业的角度来看,而是从SQL的角度来看。您不能将聚合函数与非聚合字段(即ACTM1_1_1.Number)混合在一起,并且不会有group by子句。 – 2009-12-03 18:17:59
你可能想要的是'(SELECT TOP(1)NUMBER,THENUMBER ... ORDER BY THENUMBER ASC)' – 2009-12-03 18:19:04