MySQL添加基于日期的计数字段

标签 mysql sql-order-by

id   num    date                Attempt
1    555    2015-01-03 01:00:00  1
1    555    2015-01-03 02:00:00  2
1    555    2015-01-03 03:00:00  3 
1    555    2015-01-01 04:03:03  4
1    555    2015-01-02 06:00:00  5
1    555    2015-01-06 17:55:24  6
1    555    2015-01-07 18:00:00  7
2    666    2015-01-07 01:00:00  1
2    666    2015-01-07 02:00:00  2

您好,我有上面的表格布局,但“尝试”字段为空。

我正在尝试根据 ID、日期更新尝试字段。

我用过这个

SET @x = 0; 
UPDATE attempts 
SET attempt = (@x:=@x+1) ORDER BY id, date

问题是我还需要添加 group by 子句,以便它获取新的 id 并再次从 1 重新开始增量,因为编号只是继续到下一个 id,所以我的结果当前如下所示:

id   num    date                 Attempt
1    555    2015-01-03 01:00:00  1
1    555    2015-01-03 02:00:00  2
1    555    2015-01-03 03:00:00  3 
1    555    2015-01-01 04:03:03  4
1    555    2015-01-02 06:00:00  5
1    555    2015-01-06 17:55:24  6
1    555    2015-01-07 18:00:00  7
2    666    2015-01-07 01:00:00  8
2    666    2015-01-07 02:00:00  9

由于新的 ID,8 和 9 应该分别为 1 和 2。

任何人都可以帮助编写一些代码来获得我想要的结果吗?

最佳答案

这是一种方法:

SET @x = 0; 
SET @num = -1;
UPDATE attempts 
    SET attempt = if(@num = num, @x := @x+1,
                     if(@num := num, @x := 1, @x := 1)
                    )
    ORDER BY id, date;

请明确您是想按 id, date 订购还是按 num, date 订购。

关于MySQL添加基于日期的计数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544492/

相关文章:

mysql - 列出平均教学评分最高的教授姓名

python - SQL ORDERING 在字符串格式中不起作用

mysql - Sql 查询不起作用?

javascript - 谷歌热图包括点数

PHP MySQL 连接持久性

sql-server - SQL Server 使用 Case When 和常量的语法进行排序

mysql - Perl 和 MySql 中的 utf8 编码

mysql - 分离 SQL 表,同时仍允许连接

mysql - 添加带有 LIMIT 的 ORDER BY 时,简单的 MySQL 查询被阻塞

ruby-on-rails - 基础 Rails 3 问题 : How to sort products?