所以我问了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/