gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:59:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com