2011-06-06 116 views
0

我正在使用MySQL查詢來將一系列日期時間作爲Unix時間戳(因爲我將它們轉換爲Javascript時間)。我通過如下「FROM_UNIXTIME」分組:按日分組Unix時間戳產生不均勻間隔組

SELECT 
    UNIX_TIMESTAMP(DateAndTime) as x, 
    Sum(If(Pass='Pass',1,0)) AS y, 
    Sum(If(Pass='Fail',1,0)) AS z, 
    Sum(If(Pass='Fail',1,0))/(Sum(If(Pass='Pass',1,0))+Sum(If(Pass='Fail',1,0))) AS a, 
    cases.primaryApp 
FROM casehistory, cases 
WHERE DATE_SUB(CURDATE(),INTERVAL 80 DAY) <= DateAndTime 
AND cases.caseNumber = casehistory.caseNumber 
AND cases.primaryApp = 'Promo' 
GROUP BY FROM_UNIXTIME(x, '%Y-%m-%d') 

雖然我預料我的時間戳被returnd均勻間隔(即,每天/組之間的時間相同金額),我得到以下系列:

1300488140,1300501520, 1300625099,1300699980個

所有的查詢中的其他數據是正確的,但由於時間戳的間距是不規則的,基於這些郵票條形圖小艾可怕。也許我在應用分組的方式上做錯了什麼?


謝謝你的回覆。我的查詢「有意義」,因爲它產生了可以繪製的圖像(分組是在日期和時間值的x別名上完成的),但問題是從數據庫中拉出Unix時間戳,並在白天分組返回一系列時間戳他們之間沒有相等的距離。在PHP - - 串聯一個空的時間日期,所得到的字符串轉換爲一個時間,然後通過整個事情乘以

我只一天從日期時間的MySQL場拉(無時),則解決了這個1000返回我需要繪製的Javascript時間,如下所示:

x = x . ' 00:00:00'; 
x = strtotime(x) * 1000; 

答案讓我走上了正確的軌道;我會接受它。我的圖表看起來很完美。

回答

1

問題很混亂。

您的SQL語句沒有任何意義 - 您正在按照在select語句中找不到的實體進行分組。條形圖繪製了一組有序的值 - 所以如果有一些有趣的間距,那麼它不是一個真正的條形圖。

但我認爲你正在尋找的答案是:

SELECT DATE_FORMAT(dateandtime, '%Y-%m-%d') as ondate 
, SUM(IF(Pass='Pass',1,0)) AS passed 
, SUM(IF(Pass='Fail',1,0)) AS failed 
, SUM(IF(Pass='Fail',1,0)) 
    /(SUM(IF(pass='Pass',1,0))+SUM(IF(Pass='Fail',1,0))) AS fail_pct 
, cases.primaryapp 
FROM casehistory, cases 
WHERE DATE_SUB(CURDATE(),INTERVAL 80 DAY) <= dateandtime 
AND cases.casenumber = casehistory.casenumber 
AND cases.primaryapp = 'Promo' 
GROUP BY DATE_FORMAT(dateandtime, '%Y-%m-%d') 
ORDER BY 1; 

如果你需要Unix的時間戳,敷在上面....

SELECT UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(ilv.ondate, ' 00:00:00'))) AS tstamp 
, passed 
, failed 
, fail_pct 
, primaryapp 
FROM (
    ... 
) AS ilv 

請注意,您仍然在DST交換機周圍發生異常現象。

C.