[英]How do I aggregate non-aggregate values in GROUP BY queries?
我有一張重復的桌子。 我正在嘗試轉換它們,以便可以在兩個字段(例如identifier1
和identifier2
)之間放置唯一約束。
我想將這些重復項“折疊”成單個記錄,但是我的記錄包含不同的字符串。 在這種情況下,我想保持最后的動靜(保持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.