Sql 使用窗口函数和过滤器向所有行返回1个特定值

Sql 使用窗口函数和过滤器向所有行返回1个特定值,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我需要时间戳满足:order_day='4th'在1列中显示 类似这样的数据称为“t1”: timestamp id order_day day 9 id1 5th day 8 id1 4th day 7 id1 3th day 6 id1 2th day 5 id1 1th 预期结果: timestamp id order_day info day 9 id1 5th day 8 day 8 id1

我需要时间戳满足:order_day='4th'在1列中显示

类似这样的数据称为“t1”:

timestamp id   order_day 
day 9     id1  5th
day 8     id1  4th
day 7     id1  3th
day 6     id1  2th
day 5     id1  1th
预期结果:

timestamp id   order_day  info
day 9     id1  5th        day 8
day 8     id1  4th        day 8
day 7     id1  3rd        day 8
day 6     id1  2nd        day 8
day 5     id1  1st        day 8
目前我使用:

select *,
min(timestamp) filter (where order_day = '4th') over (partition by id) as info
from t1
但是我不想使用
min()
,因为这不是我的目的,因为每个
id
对于
order\u day
,只有1个
'4th'
,所以使用
max()或min()
显示相同的结果。有办法吗


我问了一个稍微相同的问题,但使用
min()

您可以使用相关子查询作为替代-

select A.*,
(select timestamp from t1 B where B.order_day = '4th' AND B.id = A.id) as info
from t1 A
另一种选择是-

select A.imestamp,
A.id,
A.order_day,
B.timestamp as info
from t1 A 
inner join (
    select id, timestamp 
    from t1 
    where order_day = '4th'
) B
on A.id = B.id

请记住,这些只是可选选项,您需要选择最适合您的情况的选项。

为什么不使用
min()
(或
max()
),而它会产生您想要的结果?因为我认为它应该有另一种方法@GMBEX:I使用:
(当order_day='4th'然后timestamp else null end)超过(…)
不起作用并且不使用min():
时间戳过滤器()超过()
将导致语法错误我认为窗口
min()
(或
max()
)是这里的最佳方法。例如:我使用:
(当order_day='4th'然后timestamp else null end)超过(…)
不工作且未使用min():
时间戳过滤器()覆盖()
将导致语法错误@GMB