【发布时间】:2023-03-12 00:37:02
【问题描述】:
我在 Postgres 中有两个表。我想从表中获取最新的 3records 数据。
下面是查询:
select two.sid as sid,
two.sidname as sidname,
two.myPercent as mypercent,
two.saccur as saccur,
one.totalSid as totalSid
from table1 one,table2 two
where one.sid = two.sid;
上面的查询显示了检查条件 one.sid = two.sid 的所有记录;我只想从 table2 中获取最近的 3 条记录 data(4,5,6)。
我知道在 Postgres 中我们可以使用 limit 来限制要检索的行,但是在 table2 中,每个 ID 我都有多行。所以我想我不能在 table2 上使用限制,但应该在 table1 上使用。有什么建议吗?
表1:
sid totalSid
1 10
2 20
3 30
4 40
5 50
6 60
表2:
sid sidname myPercent saccur
1 aaaa 11 11t
1 bbb 13 13g
1 ccc 11 11g
1 qw 88 88k
//more data for 2,3,4,5....
6 xyz 89 895W
6 xyz1 90 90k
6 xyz2 91 91p
6 xyz3 92 92q
【问题讨论】:
-
用你的限制查找
cross apply的使用,而不是cross join或,连接我认为posgresql 称之为横向连接。 stackoverflow.com/questions/11472790/…你如何识别“最近”? -
或者使用窗口函数,比如row_number()。
-
所以我不能在上述场景中使用 LIMIT?
-
单独的限制是行不通的,因为它适用于整个连接集。因此,您无法获得每个 SID 的前 3 个。但是,当与横向连接结合使用时;该限制适用于每个连接值 (SID) 的 1 到 2 之间的每个连接
-
如何识别table2中的“Recent”?
标签: sql postgresql greatest-n-per-group