如何根据时间(月,年)计算记录?

时间:2014-06-05 09:20:02

标签: mysql sql database

我有一个表(myItems),其中有一个" id"和" date"。现在我想宣读一下,每月有多少项目(我也想区分2013年10月到2014年10月)。

我开始时:

SELECT Count(okt.id) AS Oktober, Count(nov.id) AS November
FROM    `myItems` as okt,
        `myItems` as nov    
WHERE (okt.date between '2013-10-01' and '2013-10-31') 
   OR (nov.date between '2013-11-01' and '2013-11-30')

但它打印出一个非常大的数字。我做错了什么?

3 个答案:

答案 0 :(得分:2)

试试这个。这会将数据分成几个月,然后执行COUNT:

SELECT SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`

演示:SQL Fiddle


YEAR整合:

SELECT 2013 as Year
     , SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`
WHERE YEAR(date) = 2013
UNION ALL
SELECT 2014 as Year
     , SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) AS Oktober
     , SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) AS November
FROM    `myItems`
WHERE YEAR(date) = 2014;
;

演示:Fiddle


灵感来自@ user77318

SELECT YEAR(date) as Year, month(date) as month, count(id) as count 
FROM myItems 
GROUP BY YEAR(date), MONTH(date);

我个人推荐这个,更漂亮。然后,您可以在应用层上完成所有演示文稿。

答案 1 :(得分:1)

试试这个。按月对结果进行分组:

  

选择月份(日期)作为月份,计数(id)作为计数FROM myItems日期之间的日期' 2013-10-01'和' 2013-11-30'按月分组(日期);

输出结果示例:

  

月|计数

     

10 | 100

     

11 | 200

答案 2 :(得分:0)

可能你没有使用加入,你只是给出条件。首先尝试将这两个表与主键或一些唯一且通用的数据列连接起来。然后尝试执行上面的查询。 Somthiong是这样的: -

SELECT Count(okt.id) AS Oktober, Count(nov.id) AS November
FROM    `myItems` as okt,
        `myItems` as nov    
WHERE okt.id = nov.id
AND (okt.date between '2013-10-01' and '2013-10-31')
OR (nov.date between '2013-11-01' and '2013-11-30');

这可能对你有帮助。