请考虑以下表格 struct :

  • invoice:ID,客户端ID
  • items:ID,INVOICE_ID,名称,日期

我的目标是获得以下数据集:client_id, name, date,但名称和日期是与上次购买的产品对应的列.

我try 了以下查询,但没有产生正确的结果

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;

推荐答案

您没有提到您正在使用的RDBMS--如果它支持CTE(公用表表达式)和窗口函数(许多最常用的RDBMS都支持它),您可以使用如下内容:

WITH Purchases AS
(
    SELECT 
        i.client_id, ii.name, ii.date,
        RowNum = ROW_NUMBER() OVER (PARTITION BY i.client_id ORDER BY ii.date DESC)
    FROM
        invoice i
    INNER JOIN
        invoice_item ii ON i.id = ii.invoice_id
)
SELECT
    p.client_id, p.name, p.date
FROM
    Purchases
WHERE
    p.RowNum = 1;
    

Purchases是一种CTE--一种"一次性的内联视图";使用ROW_NUMBER功能,您用client_id"划分"您的数据,每个客户的所有购买都按顺序编号,按购买日期降序排序--因此每个客户的最新购买将始终是RowNum = 1--这正是我从CTE中 Select 的.

Mysql相关问答推荐

SQL中的搜索模式

为分组记录MySQL取取值为TRUE的单行

如何使用GROUP BY调优简单SQL查询

MySQL:获取连续记录的数量(日期)?

特定时间段内每个客户的运行总计

实体内约束的唯一增量 ID 生成

基于多个 where 子句在规范化表中查找公共 ID(值)

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

如何同时从同一个表中 Select 从 SQL 表中删除行

检索按键列值分组的最新日期 (MySql)

从三个不同的表中生成两列,并使用分组变量计算这些列的比率

如何在更新语句中使用多个子字符串函数?

使用 DISTINCT 时无法从数据库中查询所有数据

Select 多列但仅按 1 列分组

使用 MySQL 在树中查找 Leaf

索引和多列主键

MySQL - 如何 Select 值在数组中的行?

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

MySQL - 我如何输入 NULL?

MySQL获取两个值之间的随机值