Sql Query计算相同的日期条目

时间:2012-02-24 10:43:30

标签: mysql sql

所有我想根据日期计算条目。(即具有相同日期的条目。) 我的桌子是

enter image description here 您可以看到第5和第6个条目具有相同的日期。

现在,我认为真正的问题是相同的日期条目有不同的时间,所以我没有得到我想要的。

我正在使用这个sql

SELECT COUNT( created_at ) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY created_at
LIMIT 0 , 30

我得到的是这个。

enter image description here

我希望2012-02-22日期的条目为2

4 个答案:

答案 0 :(得分:12)

你得到你得到的东西的原因是因为你也比较时间,相差一秒。因此,创建相同秒的所有条目将被组合在一起。

要实现实际需要的,您需要将日期函数应用于created_at列:

SELECT COUNT(1) AS entries, DATE(created_at) as date
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30

这将从列字段中删除时间部分,因此将在同一天创建的任何条目组合在一起。您可以通过删除在同一年的同一月创建的分组条目等日期部分来进一步完成此操作。

要将查询限制为在当前月份创建的条目,请在查询中添加WHERE - 子句,以仅选择满足该条件的条目。这是一个例子:

SELECT COUNT(1) AS entries, DATE(created_at) as date 
FROM  wp_frm_items
WHERE user_id = 1 
  AND created_at >= DATE_FORMAT(CURDATE(),'%Y-%m-01') 
GROUP BY DATE(created_at)

注意COUNT(1) - 部分查询仅代表Count each row,您也可以写COUNT(*)COUNT(id)或任何其他领域。从历史上看,最有效的方法是计算主键,因为它始终可用于查询引擎可以使用的任何索引。 COUNT(*)过去必须离开索引并检索表中的相应行,这有时效率低下。在更现代的查询规划器中,可能不再是COUNT(1)是另一种变体,它不会强制查询计划程序从表中检索行。

修改:可以通过多种不同方式创建按月分组的查询。这是一个例子:

SELECT COUNT(1) AS entries, DATE_FORMAT(created_at,'%Y-%c') as month
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE_FORMAT(created_at,'%Y-%c')

答案 1 :(得分:3)

您必须使用GROUP BY

消除时间
SELECT COUNT(*) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30

答案 2 :(得分:1)

哎呀,误读了。

使用GROUP BY DATE(created_at)

答案 3 :(得分:1)

尝试:

SELECT COUNT( created_at ) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30