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