[英]Using Aggregate Function in sql
为什么此查询不起作用: -
SELECT b.byhub,
Count(awbno)
FROM (SELECT awbno,
byhub,
entrydatetime,
Max(entrydatetime)
FROM wbbooking
GROUP BY awbno,
byhub,
entrydatetime) B
INNER JOIN (SELECT refno,
Max(entrydatetime)
FROM wbmmreceiving
GROUP BY refno) R
ON B.awbno = R.refno
WHERE CONVERT(DATE, b.entrydatetime) BETWEEN '2016-10-13' AND '2016-10-13'
GROUP BY b.byhub
执行此查询后,我已获得此类错误: -
Msg 8155, Level 16, State 2, Line 2
No column name was specified for column 4 of 'b'.
Msg 8155, Level 16, State 2, Line 3
No column name was specified for column 2 of 'r'.
发生错误,因为您没有为聚合列Max(entrydatetime)
指定名称。 将其更改为Max(entrydatetime) AS max_entrydatetime
。
这个查询有点奇怪。 子查询B
选择entrydatetime
以及Max(entrydatetime)
。 但由于entrydatetime
包含在group by list中,因此Max(entrydatetime)
将始终与entrydattetime
相同。
如果您想要每个awbno
和byhub
的最后一个entrydatetime
,那么不要按entrydatetime
进行分组,只在选择列表中将其包含为Max(entrydatetime)
。 如果您确实希望按此日期列进行分组,则不要将其包含为Max(entrydatetime)
。
第二个子查询的目的是什么? 除了加入之外,没有使用其返回的列。 伯爵需要它吗?
为什么在外部查询中包含where子句? 如果将它包含在第一个子查询中,则效率更高,并且不再需要返回entrydatetime
列。
只需为子查询指定列名称,如下所示:
SELECT b.byhub,
Count(awbno)
FROM (SELECT awbno,
byhub,
entrydatetime,
Max(entrydatetime) max_entrydatetime
FROM wbbooking
GROUP BY awbno,
byhub,
entrydatetime) B
INNER JOIN (SELECT refno,
Max(entrydatetime) max_entrydatetime
FROM wbmmreceiving
GROUP BY refno) R
ON B.awbno = R.refno
WHERE CONVERT(DATE, b.entrydatetime) BETWEEN '2016-10-13' AND '2016-10-13'
GROUP BY b.byhub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.