2013-01-31 24 views
0

嗨,我有點卡在這裏。我正在嘗試爲稱爲「綠色」,「黃色」和「紅色」的合同創建3個標籤。標籤由公式contractdate-curdate()標識。 - 綠色如果超過90天。 - 黃色 - 如果=結束日期是天 31和89之間 - 紅如果結束日期是30天或更少通過間隔在mysql中標記列

我需要一種方法來要麼創建標籤的列,並把每個合同在它們各自的顏色,或者用標識符爲每種顏色創建3列?

這些是我做過的一些查詢,但沒有運氣。

select 
    contractname, contractenddate 
from 
    contract 
where 
    contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 30 DAY) 
     and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 60 DAY) 
and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 90 DAY) 

select contractname, date_sub(contractenddate,interval 0-30 day)as Red, 
date_sub(contractenddate,interval 31-89 day)as Yellow, 
date_sub(contractenddate,interval 90 day)as Green 
from contract 

我知道這是不正確的,但也許有人可以幫助建立在這些?這將是非常appreicated!最後一點是我無法改變數據庫結構,我只能使用select語句。

非常感謝TON!

回答

1

像這樣的工作?考慮使用DATEDIFFCASE

SELECT contractname, 
    contractenddate, 
    CASE 
     WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'Red' 
     WHEN DATEDIFF(CurDate(),contractenddate) < 90 THEN 'Yellow' 
     ELSE 'Green' 
    END Label 
FROM Contract 

這裏是SQL Fiddle

如果你想天數的時候,你可以添加以下到您的SQL語句:

DATEDIFF(CurDate(),contractenddate) DaysAway 

另外,如果你需要的紅色,黃色和綠色的柱子,非常類似的東西會工作:

SELECT contractname, 
    contractenddate, 
    CASE WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'X' ELSE '' END 'Red', 
    CASE WHEN DATEDIFF(CurDate(),contractenddate) < 90 AND DATEDIFF(CurDate(),contractenddate) > 30 THEN 'X' ELSE '' END 'Yellow', 
    CASE WHEN DATEDIFF(CurDate(),contractenddate) >= 90 THEN 'X' ELSE '' END 'Green' 
FROM Contract 

我已經把一個'X'來標記哪一個有哪個。不清楚你在找什麼。

更多fiddle

祝你好運。

+0

謝謝你是完美的!你是一個拯救生命的人! –