Mysql 为下表构造查询

Mysql 为下表构造查询,mysql,Mysql,谁能为我生成一个查询。 假设我有一个表sales(saleID、销售日期、customerID、itemID、saleprice) date_of_sales是存储销售时间的datetime字段 customerID是自我展示的,它告诉我们商品是卖给谁的 itemID是已售出商品的ID saleprice是项目的销售价格 我想构造一个查询,它将给出每个客户上次购买的详细信息。这可以通过使用销售日期来完成 示例表 saleID |销售日期|客户ID |项目ID |售价 101 | 2008-0

谁能为我生成一个查询。 假设我有一个表sales(saleID、销售日期、customerID、itemID、saleprice)

  • date_of_sales是存储销售时间的datetime字段

  • customerID是自我展示的,它告诉我们商品是卖给谁的

  • itemID是已售出商品的ID

  • saleprice是项目的销售价格

我想构造一个查询,它将给出每个客户上次购买的详细信息。这可以通过使用销售日期来完成

示例表

saleID |销售日期|客户ID |项目ID |售价

101 | 2008-01-01 | C2000 | I200 | 650 |
102 | 2010-01-01 | C2000 | I333 | 200 |
103 | 2007-01-01 | C3333 | I111 | 800 |
104 | 2009-12-12 | C3333 | I222 | 100 |

这是示例数据表,为了简单起见,只有两个客户

  • 客户C2000完成了最后一次购买 2010年1月1日

  • 客户C3333完成了最后一次购买 2009年12月12日

我想得到这样的结果

客户ID |销售日期|项目ID |销售价格

C2000 | 2010-01-01 | I333 | 200|


C3333 | 2009-12-12 | I222 | 100 |

这可能就是您正在寻找的

SELECT *
    FROM sales
    WHERE sales.date_of_sales = (SELECT MAX(date_of_sales)
                                     FROM sales s2
                                     WHERE s2.customerID = sales.customerID);

它有一个小问题;如果同一天向同一客户进行了两次销售,则会得到两行(除非销售日期列也包含时间)。不过,我认为上述答案也是如此。

此外,如果您确实希望仅基于单个最长日期条目获得结果,我会使用上面@Sachin Shanbhag的查询,但也会添加一个最大销售ID值。。。由于这意味着是连续的,所以最后输入的可能是最新的

SELECT S.* FROM   
    sales S   
    INNER JOIN   
    (   SELECT   
            customerID, 
            MAX(date_of_sales) dos,
            MAX(SalesID) maxSale
        FROM   
            sales    
        GROUP BY customerID  
    ) S2 ON S.customerID = S2.customerID 
          AND S.date_of_sales = S2.dos  
          AND S.SalesID = S2.maxSale

解决同一天输入的问题更简单的方法是在“我的日期”字段中也使用时间。@karanits--是的,但在本例中,“日期”字段只标记日期部分,而不是时间。但是,如果dates\u of\u sales是完整的日期/时间列,则它将通过MAX()聚合调用自动按整个日期+时间进行注册。