2016-06-21 39 views
0

我有一個MySQL表如下:id,日期和多個int字段與0/1。每行中只有一個int字段將包含單個1,其他列全部爲0.日期可以重複爲每個idmysql獲取最小日期,與列組合列

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

你在那兒,只是添加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; 

如果你不想爲每個id其中行date是不是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)id使用。

相關問題