MySQL查询按日期分组

时间:2017-11-24 21:54:27

标签: mysql

我根据其他帖子尝试了各种建议,但没有用。

我有一个带有Created_Date密钥的记录数据库方案,而值为01/01/2017

我正在尝试查询数据库记录,以便返回每月有多少条记录以及与哪个月相符的返回计数。

使用以下

SELECT SQL_NO_CACHE MONTH(`Created_Date`), COUNT(*)
FROM `CRM_Leads`
GROUP BY MONTH(`Created_Date`)

我回来了

MONTH(`Created_Date`)   COUNT(*)    
          NULL            872

我还尝试了以下帖子中的几乎所有变体

Count records for every month in a year

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

假设您的created_date是一个格式字符串(' dd-mm-yyyy'),您应该使用str_to_date将其转换为日期

SELECT SQL_NO_CACHE MONTH(str_to_date(`Created_Date`, '%d/%m/%Y')), COUNT(*)
FROM `CRM_Leads`
GROUP BY MONTH(str_to_date(`Created_Date`, '%d/%m/%Y'))

答案 1 :(得分:0)

只要您将日期/时间信息存储为字符串,您将很难使用任何日期/时间特定的功能和功能。如果您从MONTH(str_to_date( Created_Date , '%d/%m/%Y'))获取NULL,则str_to_date不会将字符串转换为日期,最可能的原因是d m y&# 34;模式"是不正确的。

你所有关于你的" 字符串可能是日期"是其中一个是这样的:01/01/2017。现在可能是DD/MM/YYYYMM/DD/YYYY,我们根据您选择与我们分享的单一值无法确定哪一个是正确的。 在您的数据中查找大于12 的任何日期值,例如17/01/2017 ==> DD/MM/YYYY 01/17/2017 ==> MM/DD/YYYY

一旦你选择了哪个模式你的" 字符串可能是日期"跟随;在str_to_date()函数中应用该模式。你很想尝试一些不同的模式来获得最好的模式(这些只是你可以尝试的3种):

# which pattern is best for you?
SELECT Created_Date
     , str_to_date(`Created_Date`, '%d/%m/%Y') "d/m/y"
     , str_to_date(`Created_Date`, '%m/%d/%Y') "m/d/y"
     , str_to_date(`Created_Date`, '%Y-%m-%d') "y-m-d"
FROM `CRM_Leads`

在您选择最合适的d m y模式以应用于str_to_date函数之前,您将无法通过查询获得成功。请注意,您的数据中可能还有各种模式,在这种情况下,您需要解决更大的问题。

一旦你选择了哪个模式你的" 字符串可能是日期"跟随;在s tr_to_date()函数中应用该模式,然后通过查询将您的组生效。