2013-10-21 16 views
1

我有了被格式化這樣的MySQL VARCHAR具有獨特的日期排序

client-yearmonthdayhourminute 
TKSUS-201310210353 

我想建立一個查詢,將我拉過去的4天build號的MySQL表。我們可能每天都會有多次運行,所以我希望當天有最新的一次。

TKSUS-201310210353 
TKSUS-201310210153 
TKSUS-201310200353 
TKSUS-201310190353 
TKSUS-201310180353 

我試圖像下面,但如果有多個,每天運行它打破

SELECT DISTINCT build_number FROM test_case_executions WHERE build_number LIKE 'TKSUS%' AND build_number IS NOT NULL ORDER BY build_number DESC LIMIT 4; 

偶試過這樣的事情

SELECT DISTINCT SUBSTR(build_number, 7, LENGTH(build_number)-6) FROM test_case_executions WHERE build_number LIKE 'TKSUS%' ORDER BY build_number DESC LIMIT 4; 

感謝您的幫助。

回答

0

你應該能夠拉出來的年,月,日部分並在該列使用GROUP BY,然後在該組中選擇MAX(build_number)

SELECT 
    SUBSTR(build_number, 7, 8) AS day, 
    MAX(build_number) AS most_recent_build, 
    COUNT(build_number) AS num_builds 
FROM test_case_executions 
    WHERE build_number LIKE 'TKSUS-%' 
    GROUP BY day 
    ORDER BY day DESC 
    LIMIT 4; 
+0

將6更改爲8,看起來像我希望的那樣工作。謝謝 – jrock2004

+0

如果每天超過1個,這將不會返回所有記錄。 – Jacob

+0

@ jrock2004噢,是的,由於某種原因抱歉,我確信自己這是一個兩位數的年份。 – paddy

0

我想我會考慮拆分BUILD_NUMBER場進單獨的客戶端和日期字段,但這應該工作:

SELECT DISTINCT build_number FROM test_case_executions 
    WHERE build_number LIKE CONCAT('TKSUS-',REPLACE(CURRENT_DATE - INTERVAL 4 DAY,'-',''),'%') 
ORDER BY build_number DESC; 
0

嘗試這樣的事情......

SELECT DISTINCT build_number 
FROM test_case_executions 
WHERE 
    build_number LIKE 'TKSUS%' 
    AND build_number IS NOT NULL 
    --this clause gives you only records with date-stamps in the past 4 days 
    AND DATE(SUBSTRING(build_number, 7, 9)) >= DATESUB(CURDATE(), INTERVAL 4 DAY) 
ORDER BY 
    --these two order by clauses will sort by the date descending, and the time ascending 
    SUBSTRING(build_number, 7, 9) DESC, 
    SUBSTRING(build_number, 15, 4) ASC 
;