考虑以下表格结构:
invoice
:id,client_iditems
:id,invoice_id,name,date
我的目标是获得以下数据集:client_id, name, date
,但名称和日期是与最后购买的产品相对应的列。
我尝试了以下查询,但它没有生成正确的结果
SELECT
i.client_id, ii.name, MAX(ii.date)
FROM
invoice i
INNER JOIN
invoice_item ii ON i.id = ii.invoice_id
GROUP BY
i.client_id;
字符串
1条答案
按热度按时间ou6hu8tu1#
你没有提到你正在使用的RDBMS-如果它支持CTE(公共表表达式)和窗口函数(许多最常用的RDBMS都支持它),你可以使用这样的东西:
字符串
Purchases
是一种CTE --类似于“一次性的内联视图”;使用ROW_NUMBER
函数,您可以按client_id
对数据进行“分区”,每个客户的所有购买都按顺序编号,按购买日期降序排列-因此每个客户最近的购买将始终为RowNum = 1
-这正是我从CTE中选择的。