在一个 table 中查询最大日期,在另一个中查询组 ID
Query max date in one table and group id in another
我需要查询每个客户的最新购买。
购买:
purchase_id |日期
----------+------------
1 | 2020-03-10
2 | 2020-03-15
3 | 2020-03-14
4 | 2020-03-12
采购客户加入Table:
purchase_id | customer_id
----------+------------
1 | 3个
2 | 7
3 | 5个
4 | 5个
通过这个查询,我可以获得日期和客户 ID 的组合。但是我也需要购买ID。
SELECT
MAX(p.date), c.customer_id
FROM purchases AS p
JOIN purchase_customer AS c
ON p.purchase_id = c.purchase_id
GROUP BY c.customer_id
我知道大多数数据库都有针对此类问题的特定功能,但我想要一个 RDBMS 独立解决方案。
典型的 "standard" 方式使用 row_number()
:
SELECT pc.*
FROM (SELECT p.*, c.customer_id,
ROW_NUMBER() OVER (PARTITION BY c.customer_id ORDER BY p.date DESC) as seqnum
FROM purchases p JOIN
purchase_customer c
ON p.purchase_id = c.purchase_id
) pc
WHERE seqnum = 1;
我需要查询每个客户的最新购买。
购买:
purchase_id |日期 ----------+------------ 1 | 2020-03-10 2 | 2020-03-15 3 | 2020-03-14 4 | 2020-03-12
采购客户加入Table:
purchase_id | customer_id ----------+------------ 1 | 3个 2 | 7 3 | 5个 4 | 5个
通过这个查询,我可以获得日期和客户 ID 的组合。但是我也需要购买ID。
SELECT
MAX(p.date), c.customer_id
FROM purchases AS p
JOIN purchase_customer AS c
ON p.purchase_id = c.purchase_id
GROUP BY c.customer_id
我知道大多数数据库都有针对此类问题的特定功能,但我想要一个 RDBMS 独立解决方案。
典型的 "standard" 方式使用 row_number()
:
SELECT pc.*
FROM (SELECT p.*, c.customer_id,
ROW_NUMBER() OVER (PARTITION BY c.customer_id ORDER BY p.date DESC) as seqnum
FROM purchases p JOIN
purchase_customer c
ON p.purchase_id = c.purchase_id
) pc
WHERE seqnum = 1;