构造下表的查询

时间:2010-08-24 11:09:14

标签: mysql

任何人都可以为我生成查询。 假设我有一张表销售(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 |

2 个答案:

答案 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