首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于MySQL条件计数器的其他列?

基于MySQL条件计数器的其他列?
EN

Database Administration用户
提问于 2019-04-03 20:42:04
回答 1查看 494关注 0票数 0

我有一个查询,返回在一个日期范围内商店的所有客户的购买。它工作得很好,但是现在我被要求修改结果,所以每天只返回每个客户的第一次购买。我需要SELECT语句来计算一个列,它意味着“这是客户当天的第N次购买”。数据已经按客户名称和日期排序,所以当客户名称或日期更改时,我希望计数器变量重置为1。

代码语言:javascript
复制
 ----------------------------------------------------------------
| Customer Name | Product | PurchaseDate | PurchaseNumberForDate |
 ----------------------------------------------------------------
| Customer A    | ...     | 2019-04-01   | 1                     |
| Customer A    | ...     | 2019-04-02   | 1                     |
| Customer A    | ...     | 2019-04-03   | 1                     |
| Customer A    | ...     | 2019-04-03   | 2                     |
| Customer A    | ...     | 2019-04-03   | 3                     |
| Customer B    | ...     | 2019-04-03   | 1                     |
| Customer B    | ...     | 2019-04-03   | 2                     |
| Customer B    | ...     | 2019-04-04   | 1                     |
 ----------------------------------------------------------------

我尝试过使用MySQL变量,但我不知道如何在客户名称或购买日期更改时有条件地重置计数器。如果我能够正确计算PurchaseNumberForDate,我将使用它作为一个子查询,而另一个查询将选择WHERE PurchaseNumberForDate = 1

我已经找到了大量使用COUNT()@var := @var+1的示例,但我还没有找到基于多个条件的示例。这与MySQL是可能的吗?

EN

回答 1

Database Administration用户

发布于 2019-04-04 06:33:32

代码语言:javascript
复制
SELECT t.*, 
CASE WHEN CONCAT(t.CustomerName, CHAR(0), t.PurchaseDate) = @group
     THEN @num:=@num+1
     ELSE @num:=1
     END PurchaseNumberForDate,
@group:=CONCAT(t.CustomerName, CHAR(0), t.PurchaseDate) groupname
FROM datatable t, (SELECT @group:='', @num:=0) vars
ORDER BY t.CustomerName, t.PurchaseDate 

没有附加字段的变体:

代码语言:javascript
复制
SELECT t.*, 
CASE WHEN CONCAT(t.CustomerName, CHAR(0), t.PurchaseDate) = @group
     THEN @num:=@num+1
     ELSE @num:=1
     END + CONCAT(CHAR(0), (@group:=CONCAT(t.CustomerName, CHAR(0), t.PurchaseDate))) PurchaseNumberForDate
FROM datatable t, (SELECT @group:='', @num:=0) vars
ORDER BY t.CustomerName, t.PurchaseDate;

小提琴

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/233885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档