簡體   English   中英

SQL按一列分組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM