我正在使用MySQL查询将一系列日期时间作为Unix时间戳(因为我将它们转换为Javascript时间)。我按'FROM_UNIXTIME'分组如下:
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')
虽然我希望我的时间戳能够均匀地返回(即每天/每组之间的时间相同),但我得到以下系列:
1300488140,1300501520, 1300625099,1300699980
查询中的所有其他数据都是正确的,但由于时间戳的间距不规则,基于这些标记的条形图看起来非常糟糕。也许我在应用分组的方式上做错了什么?
感谢您的回复。我的查询“有意义”,因为它生成了可以绘制的(分组是在日期和时间值的x别名上完成的),但问题是从数据库中提取Unix时间戳并按天分组返回了一系列时间戳它们之间没有相同的距离。
我通过从日期时间MySQL字段中拉出一天(没有时间)来解决这个问题,然后 - 在PHP中 - 将空白时间连接到日期,将结果字符串转换为时间,然后将整个shebang乘以1000返回图表所需的Javascript时间,如下所示:
x = x . ' 00:00:00';
x = strtotime(x) * 1000;
答案让我走上正轨;我会接受的。我的图表现在看起来很完美。
答案 0 :(得分: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开关周围出现异常情况。
下进行。