mysql - 在 MySQL 中使用指示列按顺序、分组和按日期枚举记录

标签 mysql enumeration

所以我问了this question前一段时间,现在我遇到了一个讨厌的变体。

假设我有这张表:

ID  Date        Special 
1   2001-01-11  1      
1   2003-03-03      
1   2002-02-22  1       
2   2001-01-11  1      
2   2002-02-22  1       

我需要枚举这些记录,既按日期,也根据记录是否被标记为 Special

理想的输出应该是这样的:

ID  Date        Special  Num 
1   2001-01-11  1        1      
1   2003-03-03      
1   2002-02-22  1        2
2   2001-01-11  1        1
2   2002-02-22  1        1

这是表格:

CREATE TEMPORARY TABLE temp_table(id INT, dt DATE, Special INT);
INSERT INTO temp_table VALUES
(1, '2001-01-11', 1),
(1, '2003-03-03', NULL),
(1, '2002-02-22', 1),
(2, '2001-01-11', 1),
(2, '2002-02-22', 1);

我希望能够修改我对上述问题的回答,但它使用了我不擅长的 SQL 声明性方面。谢谢你看这个!

最佳答案

我查看了上一个问题...对于您所问的问题,答案似乎有点多。这是一个较短的版本。

select @ctr := if(@id = id,@ctr+1,1) ctr
       ,dt date
       ,@id :=id id
       from q43381823
       order by id,dt

如果你想一起排除特殊情况,那么这个......

select @ctr := if(@id = id,@ctr+1,1) ctr
       ,dt date
       ,@id :=id id
       from q43381823
       where special = 'Y'
       order by id,dt

那么如果你想包含特殊字段,这会起作用......

select @ctr := if(@id = id,@ctr+1,1) ctr
       ,dt
       ,@id :=id id
       ,special
       from q43381823
       where special = 'Y'
union
select '' as ctr, dt , id, special
       from q43381823
       where special <> 'Y'
       order by id,dt

此外,我使用了另一个问题中的创建表。

CREATE TABLE q43381823(id INT, dt DATE, special varchar(1));
INSERT INTO q43381823 VALUES
(1, '2001-01-11','Y'),
(1, '2003-03-03',''),
(1, '2002-02-22', 'Y'),
(2, '2001-01-11', 'Y'),
(2, '2002-02-22', 'Y');  

关于mysql - 在 MySQL 中使用指示列按顺序、分组和按日期枚举记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498433/

相关文章:

MySQL 数字数学精度

MySql SELECT 查询大型数据库中的性能问题

mysql - SQL语句有问题

Java从多次存在的config.properties文件中获取某个属性

powershell - 为什么在这个例子中我们需要括号?

mysql - MySQL 仍然是免费/开源数据库的不错选择吗?

python - 需要创建一个新的 Python 列表,其中包含另一个列表的所有可能的唯一组合

统计C程序中的注释数量

c# - '集合已修改;使用 async/await 可能无法执行枚举操作

mysql - 如何连接到结果有时可能以 - 符号开头的表?