[英]SQL Group by one column
所以我有這張桌子:
ID INITIAL_DATE TAX A 18-02-2012 105 A 19-02-2012 95 A 20-02-2012 105 A 21-02-2012 100 B 18-02-2012 135 B 19-02-2012 150 B 20-02-2012 130 B 21-02-2012 140
我需要的是,對於每個不同的ID,有史以來最高的TAX。 如果該稅發生了兩次,則我希望記錄的INITIAL_DATE最高。
這是我的查詢:
SELECT ID, MAX (initial_date) initial_date, tax FROM t t0 WHERE t0.tax = (SELECT MAX (t1.tax) FROM t t1 WHERE t1.ID = t0.ID GROUP BY ID) GROUP BY ID, tax ORDER BY id, initial_date, tax
但我想相信有一種更好的方式將這些記錄分組。
有沒有一種方法可以不按SELECT中的所有列分組?
您是否嘗試過分析功能?:
SELECT t0.ID, t0.INITIAL_DATE, t0.TAX
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY TAX DESC , INITIAL_DATE DESC) Corr
FROM t) t0
WHERE t0.Corr = 1
據我所知,SELECT中所有未以一種或另一種方式聚合的列都必須是GROUP BY語句的一部分。
我已經測試過,這是一個有效的解決方案
SELECT t1.ID ,
MAX(t1.data) ,
t1.tax FROM test t1
INNER JOIN ( SELECT ID ,
MAX(tax) as maxtax
FROM test
GROUP BY ID
) t2 ON t1.ID = t2.ID
AND t1.tax = t2.maxtax GROUP BY t1.ID ,t1.tax
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.