给定一个这样的表,
我想通过 SQL 创建一个表而不执行窗口函数
id | time| attribute1| attribute1atFirstRecordedTimeperID
1 | 0 | a | a
1 | 2 | b | a
2| 0 | c | c
2| 4 | d | c
我试过
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
列别名是否正确?
如果我修复此代码,我想让 SQL 代码适用于 id=2 没有在时间 t=0 记录其第一个 attribute1 的情况,但适用于 t>0。那么我是在连接条件上还是在连接内部做一分钟的操作呢?
我想通过 SQL 创建一个表,而不需要执行窗口函数来转
进入
去从
编号 | 时间| 属性1
1 | 0 | a
1 | 2 | b
2| 42 | c
2| 69 | d
到餐桌上
id | time| attribute1| attribute1atFirstRecordedTimeperID
1 | 0 | a | a
1 | 2 | b | a
2| 42 | c | c
2| 69 | d | c
如果你使用 row_number() 窗口函数来标记每个 id 中第一次出现的位置,那么你如何加入或者你不会使用加入而是使用其他东西?
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