我想從這張表中創建:
| ID | att_1 |
|---|---|
| 2 | G |
| 2 | 電阻 |
| 1 | 一種 |
| 1 | 乙 |
| 1 | C |
| 3 | F |
類似的東西:(還有一個時間戳列,att_2 列應該根據時間戳進行組織,在左側較早)
| ID | att_1 | att_2 |
|---|---|---|
| 2 | G | G,R |
| 2 | 電阻 | G,R |
| 1 | 一種 | 甲、乙、丙 |
| 1 | 乙 | 甲、乙、丙 |
| 1 | C | 甲、乙、丙 |
| 3 | F | F |
uj5u.com熱心網友回復:
您可以使用 windows 功能并進行如下簡單查詢:
演示
select
id,
att_1,
string_agg(att_1, ',') over (
partition by id
) as att_2
from test1
對于更新宣告:
update test2 t2
set att_2 = t.att_2
from (
select
id,
att_1,
string_agg(att_1, ',') over (
partition by id
) as att_2
from test1
) t
where t.id = t2.id
uj5u.com熱心網友回復:
string_Agg 我相信是你正在尋找的功能。有些系統使用 List_Agg 只依賴于 RDMBS...這似乎是 Postgresql 所以我認為它是 string_agg。
string_agg(Value, deliniator, order by [optional])
SELECT t1.ID, t1.Att_1, t2.Att_2
FROM tblName t1
INNER JOIN (SELECT ID, STRING_AGG (att_1,',' Order by Att_2) att_2
FROM tblName
GROUP BY ID) t2
on t2.ID = t1.ID
--建立在上面并假設這是一件已經完成的事情......
WITH CTE AS (
SELECT t1.ID, t1.Att_1, t2.Att_2
FROM tblName t1
INNER JOIN (SELECT ID, STRING_AGG (att_1,',' Order by Att_2) att_2
FROM tblName
GROUP BY ID) t2
on t2.ID = t1.ID)
UPDATE tblName ut1
SET ut1.att_2 = CTE.Att_2
FROM CTE
WHERE ut1.ID = CTE.ID;
——如果不是一個就完成了....
然后考慮使用觸發器、基于函式的索引或計算/生成列。雖然我相信觸發器會起作用;我不確定是否需要基于函式的索引或計算/生成的列作為分析函式并且需要處理多行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358093.html
標籤:sql PostgreSQL的 字符串聚合
