2013-11-15 66 views
0

我試圖建立一個範圍,以我的政策如何使用一系列日期和每月計數來創建查詢?

這裏是我的表

|policies| 
    |id| |date_ini| |date_end| 
    1  2013-01-01 2014-01-01  
    2  2012-02-01 2013-02-01  
    3  2013-03-01 2013-03-03  
    4  2013-04-01 2013-08-01  

我試圖創建一系列這樣

date_ini <= range_of_each_policy <= date_end 

下面是使用邏輯年2013

|jan| |feb| |mar| |apr| |may| |jun| |jul| |ago| |sep| |oct| |nov| |dic| 
id1 id1 id1 id1 id1 id1 id1 id1 id1 id1 id1 id1 
id2 id2 __________________________________________________________ 
__________ id3 ______________________________________________________ 
_______________ id4 id4 id4 id4 id4 _______________________ 

此外它每月還會顯示

jan feb mar apr......... 
    3 3  2 2.... 

我該怎麼做?

有人可以幫我嗎?

回答

1

不是最乾淨的查詢......但這是你在找什麼?

SET @year := 2013; 

SELECT 
    CASE WHEN CONCAT(@year, '-01-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Jan, 
    CASE WHEN CONCAT(@year, '-02-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Feb, 
    CASE WHEN CONCAT(@year, '-03-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Mar, 
    CASE WHEN CONCAT(@year, '-04-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Apr, 
    CASE WHEN CONCAT(@year, '-05-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END May, 
    CASE WHEN CONCAT(@year, '-06-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Jun, 
    CASE WHEN CONCAT(@year, '-07-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Jul, 
    CASE WHEN CONCAT(@year, '-08-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Aug, 
    CASE WHEN CONCAT(@year, '-09-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Sep, 
    CASE WHEN CONCAT(@year, '-10-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Oct, 
    CASE WHEN CONCAT(@year, '-11-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END Nov, 
    CASE WHEN CONCAT(@year, '-12-01') BETWEEN date_ini AND date_end THEN CONCAT('id', id) END `Dec` 
FROM 
    policies 
WHERE 
    date_end >= CONCAT(@year, '-01-01') 
    AND 
    date_ini <= CONCAT(@year, '-12-01') 

但我認爲通常使用代碼來表示結果會更好,例如,與PHP,而不是使用MySQL查詢。

小提琴是here

編輯

而這個查詢是總和:

SET @year := 2013; 

SELECT 
    SUM(CONCAT(@year, '-01-01') BETWEEN date_ini AND date_end) Jan, 
    SUM(CONCAT(@year, '-02-01') BETWEEN date_ini AND date_end) Feb, 
    SUM(CONCAT(@year, '-03-01') BETWEEN date_ini AND date_end) Mar, 
    SUM(CONCAT(@year, '-04-01') BETWEEN date_ini AND date_end) Apr, 
    SUM(CONCAT(@year, '-05-01') BETWEEN date_ini AND date_end) May, 
    SUM(CONCAT(@year, '-06-01') BETWEEN date_ini AND date_end) Jun, 
    SUM(CONCAT(@year, '-07-01') BETWEEN date_ini AND date_end) Jul, 
    SUM(CONCAT(@year, '-08-01') BETWEEN date_ini AND date_end) Aug, 
    SUM(CONCAT(@year, '-09-01') BETWEEN date_ini AND date_end) Sep, 
    SUM(CONCAT(@year, '-10-01') BETWEEN date_ini AND date_end) Oct, 
    SUM(CONCAT(@year, '-11-01') BETWEEN date_ini AND date_end) Nov, 
    SUM(CONCAT(@year, '-12-01') BETWEEN date_ini AND date_end) `Dec` 
FROM 
    policies 
WHERE 
    date_end >= CONCAT(@year, '-01-01') 
    AND 
    date_ini <= CONCAT(@year, '-12-01') 

小提琴here

+0

fthiella我如何計算每個月?例如計算所有在1月,二月,三月...你的代碼是正確的,但我也需要。你能幫我解決這個問題嗎? –

+0

@CarlitosMorales請看我編輯的答案。但你確定jan和feb應該給3嗎?我得到2,如果我理解你的邏輯,它應該是正確的... – fthiella

+0

Ups抱歉,我的不好,你是對的我會在幾分鐘內檢查你的代碼:) –

相關問題