【发布时间】:2012-07-06 18:18:02
【问题描述】:
下面的查询应该返回 881 行,但只返回 744:
SELECT MIN(DateTime),AVG(ISNULL((Convert(decimal(10,3),SCR1_EXHAUST_GAS_TEMP)),0))
FROM jmusa_LOG1
GROUP BY DATEPART(HH,DateTime),DATEPART(DD,DateTime)
ORDER BY MIN(DateTime)
现在,如果我分别运行这两个查询,我分别得到 588 和 293,这等于我需要的 881:
SELECT MIN(DateTime),AVG(ISNULL((Convert(decimal(10,3),SCR1_EXHAUST_GAS_TEMP)),0))
FROM jmusa_LOG1
WHERE SCR1_EXHAUST_GAS_TEMP IS NULL
GROUP BY DATEPART(HH,DateTime),DATEPART(DD,DateTime)
ORDER BY MIN(DateTime)
上述语句的主要区别在于 WHERE 语句。
SELECT MIN(DateTime),AVG(ISNULL((Convert(decimal(10,3),SCR1_EXHAUST_GAS_TEMP)),0))
FROM jmusa_LOG1
WHERE SCR1_EXHAUST_GAS_TEMP IS NOT NULL
GROUP BY DATEPART(HH,DateTime),DATEPART(DD,DateTime)
ORDER BY MIN(DateTime)
这里也有相同的关键区别,请注意区别在于一个有 IS NULL,另一个 IS NOT NULL
现在有人知道为什么会这样吗?我可能的错误是什么导致第一次提到的查询没有返回所有 881 结果?
数据库管理器:SQL Server 2008 R2 和 SSMS 日期格式(如有必要):YYYY-MM-DD HH:MM:SS.000
【问题讨论】:
-
您的两个单独的查询是否有任何重复的条目 GROUP BY 条目?如果是这样,则它们在您的单独查询中被重复计算,但在单个查询中合并为单个计算。
-
不,我仔细检查并确保它们不重复
标签: sql sql-server select group-by average