我在我的Oracle數據庫中有2個表,customer
和payment
,其中customer
可以有多個payment
。如何從組查詢中的列中選擇一個值
如果我運行下面的查詢:
SELECT customer.customer_id, customer.name, payment.pay_date
FROM customer, payment
WHERE customer.customer_id = payment.customer_id;
我會得到的結果如下圖所示的例子。
customer_id | name | pay_date
----------------------------------
1001 | Mr.A | 01/10/2014
1001 | Mr.A | 02/10/2014
1001 | Mr.A | 03/10/2014
1001 | Mr.A | 04/10/2014
現在,我要選擇每個customer_id
最後pay_date
,我會做到這一點。
SELECT customer.customer_id, customer.name, max(payment.pay_date) as last_pay_date
FROM customer, payment
WHERE customer.customer_id = payment.customer_id
GROUP BY customer.customer_id, customer.name;
使得結果變得
customer_id | name | last_pay_date
----------------------------------
1001 | Mr.A | 04/10/2014
的問題是,我知道customer.name
不明顯具有相同customer_id
每一位客戶。
我想知道是否有聚合函數,說ONE()
,這讓我做如下:
SELECT customer.customer_id, ONE(customer.name), max(payment.pay_date) as last_pay_date
FROM customer, payment
WHERE customer.customer_id = payment.customer_id
GROUP BY customer.customer_id;
所以,我沒有把customer.name
到GROUP BY
條款因爲我認爲這使得我的SQL很難閱讀:它誤導了任何人閱讀SQL,認爲結果可能有多於一行,但是具有相同的customer_id
但不同的name
。
我不知道爲什麼我喜歡'ORA-00904錯誤:「LAST」:無效identifier'當我使用它們。 – asinkxcoswt 2014-10-22 09:38:24
@asinkxcoswt您是否使用'LAST(customer.name)'? – Barry 2014-10-22 09:50:11
是的,當我使用FIRST(customer.name)時,我得到了'ORA-00904:「FIRST」:無效標識符'。 – asinkxcoswt 2014-10-22 09:53:58