Reputation: 20580
CREATE TABLE asset (
asset_name VARCHAR(255) NOT NULL PRIMARY KEY
);
CREATE TABLE asset_purchase (
asset_name VARCHAR(255) REFERENCES asset,
purchase_value INT NOT NULL,
purhcase_timestamp INT NOT NULL
);
I try the below query:
SELECT *
FROM
asset
JOIN asset_purchase USING (asset_name) ORDER BY purhcase_timestamp LIMIT 1;
But it only returns one entry
Upvotes: 0
Views: 29
Reputation: 425371
SELECT *
FROM (
SELECT ap.*,
ROW_NUMBER() OVER (PARTITION BY a.asset_name ORDER BY purchase_timestamp DESC) rn
FROM asset a
LEFT JOIN
asset_purchase ap
ON ap.asset_name = a.asset_name
) q
WHERE rn = 1
, or
SELECT (a).*, (ap).*
FROM (
SELECT asset.a,
(
SELECT ap
FROM asset_purchase ap
WHERE ap.asset_name = a.asset_name
ORDER BY
purchase_timestamp DESC
LIMIT 1
)
) q
, or
SELECT DISTINCT ON (a.asset_name)
*
FROM asset a
LEFT JOIN
asset_purchase ap
ON ap.asset_name = a.asset_name
ORDER BY
a.asset_name, ap.purchase_timestamp DESC
, or (in PostgreSQL 9.3+)
SELECT *
FROM asset
LEFT JOIN
LATERAL
(
SELECT *
FROM asset_purchase ap
WHERE ap.asset_name = a.asset_name
ORDER BY
purchase_timestamp DESC
LIMIT 1
) ap
ON TRUE
Upvotes: 1