mysql获取最小日期,通过

时间:2016-06-21 20:18:45

标签: mysql

我有一个MySQL表如下:id,date和多个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;

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

1 个答案:

答案 0 :(得分:1)

你在那里,只需添加min(date)

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;

如果您不想要行date不是id' s min(日期)的每个ID的行,那么您需要一个子查询:

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)的{​​{1}}的记录。