我在MySQL中有一个timestamp字段,但是我想按Year,Month和Week分组。在这种情况下,我将按周计算系统错误计数。
现在,我可以这样查询:
SELECT
YEAR( ERRDATE ) AS YEAR,
MONTH ( ERRDATE ) AS MONTH,
WEEK ( ERRDATE ) AS WEEK,
COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount
(省略条款组)
但是该查询给了我我不希望的三列(年份,月份,星期)。
我想要的是一列,其计算的日期按降序排列,第二列,其错误值,因此我可以将这些数据传递给制图程序。
我已经尝试过使用CONCAT,但是问题在于CONCAT用于字符串,并且计算的日期顺序错误。我尝试使用CAST和CONVERT,甚至在CONCAT中使用嵌套的CAST,但仍然无法从时间戳字段中正确排序单个计算的日期列。
例如,这种方法无法正常工作:
CONCAT(YEAR(ERRDATE), MONTH(ERRDATE), WEEK(ERRDATE)) as THEDATE
所以,我如何以正确的顺序从tiemstamp字段中获得一个计算字段?
非常感谢,
如果当前查询已经为您提供了结果,您只需将其封装在子查询中
SELECT CONCAT ( year, month, week) as period, ErrorCount
FROM (
SELECT YEAR ( ERRDATE ) AS YEAR,
MONTH ( ERRDATE ) AS MONTH,
WEEK ( ERRDATE ) AS WEEK,
COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount
...
) as t
您的查询应该是:
SELECT
DATE_FORMAT(ERRDATE,"%Y,%m,%U") AS Period,
COUNT( DISTINCT ( ERRMSG ) ) AS ErrorCount
FROM YOUR_TABLE
GROUP BY Period;
查看有关DATE_FORMAT功能的更多信息