任何人都可以为我生成查询。 假设我有一张表销售(saleID,date_of_sales,customerID,itemID,saleprice)
date_of_sales是存储销售时间的日期时间字段。
customerID是自我宣传,告诉他们出售的物品。
itemID是已售商品的ID。
saleprice是该商品的售价。
我想构建一个查询,该查询将给出每个客户上次购买的详细信息。这可以通过使用date_of_sales来完成。
示例表
saleID | date_of_sales | customerID | itemID | saleprice
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-01-01
客户C3333上次购买 在2009-12-12
我想得到像这样的结果
customerID | date_of_sales | itemID | saleprice
C2000 | 2010-01-01 | I333 | 200 |
C3333 | 2009-12-12 | I222 | 100 |
答案 0 :(得分:1)
这可能就是你要找的......
SELECT *
FROM sales
WHERE sales.date_of_sales = (SELECT MAX(date_of_sales)
FROM sales s2
WHERE s2.customerID = sales.customerID);
它有一点点问题;如果同一天有两个销售给同一个客户,您将获得两行(除非您的销售日期列包括时间)。我认为同样适用于上述答案。
答案 1 :(得分:0)
此外,如果您想要仅基于最大日期的单个条目获得结果,我将使用上面的@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