【问题标题】:Grouping Unix Timestamp by Day Producing Unevenly Spaced Groups按天分组 Unix 时间戳产生不均匀间隔的组
【发布时间】:2011-06-06 11:28:19
【问题描述】:

我正在使用 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 时间戳并按天分组会返回一系列时间戳它们之间的距离不相等。

我通过从 datetime MySQL 字段中仅提取日期(不包括时间)来解决这个问题,然后 - 在 PHP 中 - 将一个空时间连接到日期,将结果字符串转换为时间,然后将整个 shebang 乘以 1000返回图表所需的 Javascript 时间,如下所示:

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

答案让我走上了正轨;我会接受的。我的图表现在看起来很完美。

【问题讨论】:

    标签: mysql sql datetime group-by timestamp


    【解决方案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.

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 2013-01-29
      • 2017-06-02
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2012-03-30
      • 2022-08-03
      相关资源
      最近更新 更多