簡體   English   中英

如何在GROUP BY查詢中匯總非匯總值?

[英]How do I aggregate non-aggregate values in GROUP BY queries?

我有一張重復的桌子。 我正在嘗試轉換它們,以便可以在兩個字段(例如identifier1identifier2 )之間放置唯一約束。

我想將這些重復項“折疊”成單個記錄,但是我的記錄包含不同的字符串。 在這種情況下,我想保持最后的動靜(保持ID最高,其余的丟棄)。

例如,我可以使用MIN()聚合下面的startDate ,但是如何僅獲取最新location

    id | identifier1 | identifier2 | location   | startDate
    1  | alice       | 0001        | ambridge   | 2016-01-01
    2  | bob         | 1312        | brigadoon  | 2017-01-01
    3  | alice       | 0001        | brigadoon  | 2017-05-01
    4  | bob         | 9999        | brigadoon  | 2015-01-01
    5  | celeste     | 1234        | cittegazze | 2011-01-01

    id | identifier1 | identifier2 | location   | startDate
    6  | alice       | 0001        | brigadoon  | 2016-01-01
    7  | bob         | 1312        | brigadoon  | 2017-01-01
    8  | bob         | 9999        | brigadoon  | 2015-01-01
    9  | celeste     | 1234        | cittegazze | 2011-01-01

嘗試這個:

select A.identifier1, A.identifier2, A.startDate, B.Location from (
    select identifier1,
           identifier2,
           MIN(startDate) AS startDate
    from TABLE_NAME
    group by identifier1, identifier2
) AS A JOIN TABLE_NAME AS B
ON (A.identifier1 = B.identifier1 and A.identifier2 = B.identifier2 and A.startDate = B.startDate)

我認為更有效的查詢就是:

select t.*
from t
where t.startDate = (select max(t2.startDate)
                     from t t2
                     where t2.identifier1 = t.identifier1 and t2.identifier2 = t.identifier2
                    );

這種方法的優點是可以利用(identifier1, identifier2, startDate)上的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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