在业务中需要关联表查询,并且需要取出其中一个表的最新一条记录时,需要将数据进行分组,通过ARRAY_AGG函数。
下面的例子是,查询出每个用户的最新一个订单。这里没有采用网上说的子查询是考虑到如果数据量过大的时候,子查询将会消耗大量的处理时间。
SELECT
user_as.*,order_as.table_order_pk_id
FROM
(
SELECT
order_as .table_user_pk_id,
(
SELECT
UNNEST (
ARRAY_AGG (
order_as .table_order_pk_id
ORDER BY
order_as .createdate DESC
)
)
LIMIT 1
) table_order_pk_id
FROM
order as order_as
GROUP BY
order_as .table_user_pk_id
) tmp_table,
user AS user_as,
order AS order_as
WHERE
tmp_table.table_user_pk_id = user_as.table_user_pk_id
AND tmp_table.table_order_pk_id= order_as.table_order_pk_id