在给定日期按小时计算mysql行数

时间:2015-02-12 16:06:11

标签: mysql stored-procedures count

我有一个带日期列的mysql表。日期列数据类型为TIMESTAMP,默认设置为CURRENT_TIMESTAMP,记录日期和时间

现在我想在给定的日期计算我的行数

作为一个例子

 ++++++++++ 8am 9am 10am 11am
 ++user1+++  15  10  11    10
 ++user2+++  10  10  20    30

每小时的计数应该像这样单独记录。

我试过这个,但它不起作用

SELECT COUNT(*) FROM mytable 
WHERE `date` = '2015-01-26' 
GROUP BY HOUR(`TIMESTAMP`)

我怎样才能实现这一目标?

我不知道如何与用户分组。 sproc也没关系

我做了这样的蠢货。但是这个sproc包含错误。可以请一些人帮助我,现在我想把这个分开9个小时

  DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test22`(IN datestamp DATE)
BEGIN
SELECT username, 

       COUNT(if(disblid,1,null)) '8:00 AM', where time between '08:00' and '09:00':
        COUNT(if(disblid,1,null)) '9:00 AM' , where time between '09:00' and '10:00';




FROM claimloans 
WHERE DATE(date) = datestamp
group by Username;

   END

感谢所有帮助过我的人,我想出了一个非常好用的sproc。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `claimscounter`(IN datestamp DATE)
BEGIN
SELECT username, 

    COUNT(IF(HOUR(date)=0,1,NULL)) AS '12am',
    COUNT(IF(HOUR(date)=1,1,NULL)) AS '1am',
    COUNT(IF(HOUR(date)=2,1,NULL)) AS '2am',
    COUNT(IF(HOUR(date)=3,1,NULL)) AS '3am',
    COUNT(IF(HOUR(date)=4,1,NULL)) AS '4am',
    COUNT(IF(HOUR(date)=5,1,NULL)) AS '5am',
    COUNT(IF(HOUR(date)=6,1,NULL)) AS '6am',
    COUNT(IF(HOUR(date)=7,1,NULL)) AS '7am',
    COUNT(IF(HOUR(date)=8,1,NULL)) AS '8am',
    COUNT(IF(HOUR(date)=9,1,NULL)) AS '9am',
    COUNT(IF(HOUR(date)=10,1,NULL)) AS '10am',
    COUNT(IF(HOUR(date)=11,1,NULL)) AS '11am',
    COUNT(IF(HOUR(date)=12,1,NULL)) AS '12pm',
    COUNT(IF(HOUR(date)=13,1,NULL)) AS '1pm',
    COUNT(IF(HOUR(date)=14,1,NULL)) AS '2pm',
    COUNT(IF(HOUR(date)=15,1,NULL)) AS '3pm',
    COUNT(IF(HOUR(date)=16,1,NULL)) AS '4pm',
    COUNT(IF(HOUR(date)=17,1,NULL)) AS '5pm',
    COUNT(IF(HOUR(date)=18,1,NULL)) AS '6pm',
    COUNT(IF(HOUR(date)=19,1,NULL)) AS '7pm',
    COUNT(IF(HOUR(date)=20,1,NULL)) AS '8pm',
    COUNT(IF(HOUR(date)=21,1,NULL)) AS '9pm',
    COUNT(IF(HOUR(date)=22,1,NULL)) AS '10pm',
    COUNT(IF(HOUR(date)=23,1,NULL)) AS '11pm'


FROM claimloans 
WHERE DATE(date) = datestamp
group by username;

   END

但现在我又遇到了一个小问题。这计算所有的时间。如果它不是一小时的进入,它就算为零。我想数小时只有记录可以有人帮我这个

thnaks

1 个答案:

答案 0 :(得分:0)

我会像这样解决这个问题:

CREATE TABLE foo (id int not null, val timestamp);

CREATE VIEW foo_by_hours AS (
    SELECT
        id,
        DATE(val) AS 'day',
        COUNT(IF(HOUR(val)=0,1,NULL)) AS '12am',
        COUNT(IF(HOUR(val)=1,1,NULL)) AS '1am',
        COUNT(IF(HOUR(val)=2,1,NULL)) AS '2am',
        COUNT(IF(HOUR(val)=3,1,NULL)) AS '3am',
        ...
    FROM foo
    GROUP BY id, day);

SELECT * FROM foo_by_hours;

SQL Fiddle上的完整示例 我还添加了一个使用SUM代替COUNT的视图。结果是一样的,这只是一种不同的方式。