Mysql SQL聚合正在运行的记录计数

Mysql SQL聚合正在运行的记录计数,mysql,sql,Mysql,Sql,我对SQL比较陌生,所以对于任何愚蠢的问题,我深表歉意,但我甚至无法接近这一点 我有一个客户订单数据集,其中包括客户ID和日期。我想返回一个查询,其中所有客户订单都添加了两个字段,“首次订单日期”和“订单数量” 任何指点都将不胜感激 如果我理解正确,谢谢你: 您拥有的源数据: Cust_ID Date 5001 04/10/13 5001 11/10/13 5002 11/10/13 5001 17/10/13 5001

我对SQL比较陌生,所以对于任何愚蠢的问题,我深表歉意,但我甚至无法接近这一点

我有一个客户订单数据集,其中包括客户ID日期。我想返回一个查询,其中所有客户订单都添加了两个字段,“首次订单日期”和“订单数量”

任何指点都将不胜感激


如果我理解正确,谢谢你:

您拥有的源数据:

Cust_ID    Date
5001       04/10/13   
5001       11/10/13   
5002       11/10/13   
5001       17/10/13  
5001       24/10/13    
5002       24/10/13    
您期望的结果数据集:

Cust_ID    Date        FirstOrder     OrderNumber
5001       04/10/13    04/10/13       1
5001       11/10/13    04/10/13       2
5002       11/10/13    11/10/13       1
5001       17/10/13    04/10/13       3
5001       24/10/13    04/10/13       4
5002       24/10/13    11/10/13       2
然后查询应该是(如果使用AF):

不包括AF,仅使用标准SQL:

SELECT S.Cust_ID, S.Date, MIN(J.Date) as FirstDate, Count(S.Cust_id)
FROM Orders S
INNER JOIN Orders J
ON S.Cust_ID = J.Cust_ID and S.Date >= J.Date
GROUP BY S.Cust_id, S.Date
你能试试这个吗

SELECT tab.Cust_ID, tab.Date, x.FirstOrder, x.orderCount
FROM tab INNER JOIN (
    SELECT Cust_ID, MIN(Date) AS FirstOrder,
        COUNT(*) AS orderCount
    FROM tab
    GROUP BY CustID
) x ON tab.Cust_ID = x.Cust_ID
内部查询为每个客户选择
FirstOrder
orderCount
,最后为每个订单加入

更新 使用
用户变量
可以跟踪客户ID的订单计数顺序

SELECT *
FROM (
    SELECT tab.Cust_ID, tab.Date AS Date, x.FirstOrder, x.orderCount,
        IF(@prev_cust_id = tab.Cust_ID, @cnt := @cnt + 1, @cnt := 1)
    FROM tab INNER JOIN (
        SELECT Cust_ID, MIN(Date) AS FirstOrder,
            COUNT(*) AS orderCount
        FROM tab
        GROUP BY CustID
    ) x ON tab.Cust_ID = x.Cust_ID,
    (SELECT @prev_cust_id := 0, @cnt := 1) y
    ORDER BY tab.Cust_ID
) x
ORDER BY Date;
选择foo.Cust\u ID
,foo.`日期`
,最小值(p.`Date`)作为第一订单
,COUNT(*)作为orderCount
来自富
加入富为p
在p.Cust\u id=foo.Cust\u id上

p.`Date`这个问题需要一个MySQL的答案。你写了代码吗?我写了,但没有取得任何进展,所以我没有发布任何东西。您下面的解决方案非常完美。除了它给出每个记录的总计数,而不是运行total@user3169268啊哈。我在工作中误解了你的问题。请稍等。@user3169268我已更新。但没有对你的数据进行测试。当前面的SQL不适合您时,请给我们一些关于SQLFIDLE的示例数据。
SELECT tab.Cust_ID, tab.Date, x.FirstOrder, x.orderCount
FROM tab INNER JOIN (
    SELECT Cust_ID, MIN(Date) AS FirstOrder,
        COUNT(*) AS orderCount
    FROM tab
    GROUP BY CustID
) x ON tab.Cust_ID = x.Cust_ID
SELECT *
FROM (
    SELECT tab.Cust_ID, tab.Date AS Date, x.FirstOrder, x.orderCount,
        IF(@prev_cust_id = tab.Cust_ID, @cnt := @cnt + 1, @cnt := 1)
    FROM tab INNER JOIN (
        SELECT Cust_ID, MIN(Date) AS FirstOrder,
            COUNT(*) AS orderCount
        FROM tab
        GROUP BY CustID
    ) x ON tab.Cust_ID = x.Cust_ID,
    (SELECT @prev_cust_id := 0, @cnt := 1) y
    ORDER BY tab.Cust_ID
) x
ORDER BY Date;
SELECT foo.Cust_ID
     , foo.`Date`
     , MIN(p.`Date`) AS FirstOrder
     , COUNT(*) AS orderCount
FROM foo
JOIN foo AS p
  ON p.Cust_id = foo.Cust_id
    AND p.`Date` <= foo.`Date`
GROUP BY foo.Cust_ID, foo.`Date`
ORDER BY foo.`Date`;