按CURRENT_TIMESTAMP进行SQL选择和分组

时间:2016-10-04 11:22:05

标签: php mysql sql-server database

我正在尝试从MySQL中选择日期和分组。

表格如下:

  `id` int(11) NOT NULL,
  `run_data` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `date_day` varchar(20) NOT NULL,
  `number_of_links` int(20) NOT NULL,

选择,我正在使用:

SELECT date_day, SUM(number_of_links) FROM my_table GROUP BY date_day DESC LIMIT 30

我每天都获得链接总数,但我无法按日期对其进行排序。我的数据库中的date_day只是:

$date_day = date('d/m/Y', time());

任何想法如何解决?

到目前为止我尝试了什么:

GROUP BY TO_DAYS(`run_data`)
GROUP BY MONTH(run_data)
GROUP BY DATE(STR_TO_DATE(run_data));

3 个答案:

答案 0 :(得分:1)

您的date_day字段无法排序。至少除非你为它编写自定义逻辑,这通常是在PHP中完成的;或者在每个查询上进行转换,这对于数据库来说可能非常昂贵(更不用说给出不正确的结果)。

正如@nospor的评论中所提到的,这个问题的正确答案是将字段改为适当的date字段。然后,您可以轻松地对其进行排序和/或分组 为此,我建议您查看MySQL manual中的ALTER TABLE语法。

答案 1 :(得分:1)

假设你将date_day存储为格式为'd / m / Y'的字符串,你可以在日期中转换字符串

SELECT date_day, SUM(number_of_links) 
FROM my_table 
GROUP BY date_day 
ORDER BY str_to_date(date_day, '%d/%m/%Y') DESC 
LIMIT 30

答案 2 :(得分:0)

您的date_day属于varchar类型,因此要在date_day上对结果进行排序,您必须将其转换为date数据类型,如下所示:

SELECT date_day, SUM(number_of_links)
FROM my_table
GROUP BY date_day
ORDER BY CAST(date_day AS DATE()) DESC
LIMIT 30