【发布时间】:2016-02-11 18:35:22
【问题描述】:
我有一个表 users 和一个表 orders。
表 users 有一个主键 user_id 和一些其他字段。表orders有一个外键user_id,一个名字order_name和一个日期order_date。
对于旧版导出,我需要构建一个查询以返回表单中的数据
user_id | order_name1 | order_name2 | order_name3 其中订单 1-3 是客户最近的三个订单。
我的想法是查询客户并使用 select to orders 进行三个连接
SELECT
users.*,
order1.order_name AS order_name1,
order2.order_name AS order_name2,
order3.order_name AS order_name3
FROM users AS users
JOIN (
SELECT
user_id,
order_name,
order_date
FROM orders ORDER BY order_date DESC OFFSET 0 LIMIT 1)
AS order1 ON order1.user_id=users.user_id
JOIN (
SELECT
user_id,
order_name,
order_date
FROM orders ORDER BY order_date DESC OFFSET 1 LIMIT 1)
AS order2 ON order2.user_id=users.user_id
JOIN (
SELECT
user_id,
order_name,
order_date
FROM orders ORDER BY order_date DESC OFFSET 2 LIMIT 1)
AS order3 ON order3.user_id=users.user_id
但是,这不起作用,因为它只从订单中返回一行,而不是专门针对每个用户。
这样的查询怎么写?
【问题讨论】:
标签: sql postgresql greatest-n-per-group