Dada uma tabela como esta,
Quero criar uma tabela via SQL sem fazer funções de janela
id | time| attribute1| attribute1atFirstRecordedTimeperID
1 | 0 | a | a
1 | 2 | b | a
2| 0 | c | c
2| 4 | d | c
tentei
SELECT
t1.id,
t1.time,
t1.attribute1,
attribute1fixedattime0 = t2.attribute1
FROM s t1
INNER JOIN (
SELECT attribute1 AS attribute1fixedattime0
FROM s
WHERE time = 0
) t2 ON t1.id = t2.id
O alias da coluna está correto?
Se eu corrigir esse código, quero fazer o código SQL funcionar para o caso em que id=2 não tem seu primeiro atributo1 registrado no tempo t=0, mas para t>0. Então faço um min na condição de join ou dentro do JOIN?
Quero criar uma tabela via SQL sem fazer funções de janela para virar
em
Para ir de
identificação | tempo| atributo1
1 | 0 | a
1 | 2 | b
2| 42 | c
2| 69 | d
para a mesa
id | time| attribute1| attribute1atFirstRecordedTimeperID
1 | 0 | a | a
1 | 2 | b | a
2| 42 | c | c
2| 69 | d | c
se você usar uma função de janela row_number() para marcar o local em que a primeira vez está dentro de cada id, então como você se junta ou não usaria uma junção, mas algo mais?
SELECT
id,
time,
attribute1,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY time) AS rn
FROM your_table
SELECT
id,
time,
attribute1,
FIRST_VALUE(attribute1) OVER (PARTITION BY id ORDER BY time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS attribute1atFirstRecordedTimeperID
FROM (
-- Previous query here
) AS subquery