[英]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.