gpt4 book ai didi

mysql获取最小日期,用group by组合列

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

我有一个MySQL表,如下:id、日期和多个int带有 0/1 的字段。只有一个int每行中的字段将包含一个 1,其他列全部为 0。每个 id 的日期可以重复。 。

id     | date         | isX | isY | isZ
-------+--------------+-----+-----+-----
111111 | '1994-04-09' | 0 | 1 | 0
222222 | '1991-07-29' | 1 | 0 | 0
222222 | '1991-07-29' | 0 | 1 | 0
333333 | '1993-06-29' | 0 | 0 | 1
333333 | '1993-06-29' | 0 | 1 | 0
333333 | '1996-04-09' | 0 | 1 | 0

我想为每个 id 获取一行,最早的日期,每个 int 为 1列(如果有任何行) id和日期的值为 1(否则为 0)。

id     | date         | isX | isY | isZ
-------+--------------+-----+-----+-----
111111 | '1994-04-09' | 0 | 1 | 0
222222 | '1991-07-29' | 1 | 1 | 0
333333 | '1993-06-29' | 0 | 1 | 1

我使用以下命令来组合 int

select id, 
if(sum(isX)>0,1,0) as isX,
if(sum(isY)>0,1,0) as isY,
if(sum(isZ)>0,1,0) as isZ
from table group by id;

但我不确定如何仅使用具有最小日期的那些行以及如何将日期添加到输出中。

最佳答案

您当时就在那里,只需添加分钟(日期)

select id, 
min(`date`) as mindate,
if(sum(isX)>0,1,0) as isX,
if(sum(isY)>0,1,0) as isY,
if(sum(isZ)>0,1,0) as isZ
from table
group by id;

如果您不希望每个 id 的行 date 不是 id 的 min(date),那么您需要一个子查询:

select id, 
`date`
if(sum(isX)>0,1,0) as isX,
if(sum(isY)>0,1,0) as isY,
if(sum(isZ)>0,1,0) as isZ
from table
INNER JOIN (SELECT id, min(date) as mindate FROM table GROUP BY id) sub1 ON
table.id = sub1.id AND
table.`date` = sub1.`date`
group by id, `date`;

现在,if(sum(isx...) 逻辑将仅用于 datemin(date) 的记录为 id

关于mysql获取最小日期,用group by组合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953839/

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