2011-06-06 120 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.