MySQL计数数字关闭

时间:2012-08-21 16:37:36

标签: mysql count

我不确定为什么我的号码相互之间大相径庭。

没有最大ID的查询:

SELECT id, DATE_FORMAT(t_stamp, '%Y-%m-%d %H:00:00') as date, COUNT(*) as count
FROM test_ips
WHERE id > 0
AND viewip != ""
GROUP BY HOUR(t_stamp)
ORDER BY t_stamp ASC;

我明白了:

1     2012-07-18 19:00:00     1313
106     2012-07-18 20:00:00     1567
107     2012-07-19 09:00:00     847
225     2012-07-19 10:00:00     5095
421     2012-07-19 11:00:00     205
423     2012-07-19 12:00:00     900
461     2012-07-19 13:00:00     619
490     2012-07-20 15:00:00     729
575     2012-07-20 16:00:00     1682
1060     2012-07-20 17:00:00     2063
2260     2012-07-20 18:00:00     1417
5859     2012-07-20 21:00:00     1303
7060     2012-07-20 22:00:00     1340
8280     2012-07-20 23:00:00     1211
9149     2012-07-21 00:00:00     1675
10418     2012-07-21 01:00:00     721
11127     2012-07-21 02:00:00     825

但如果我添加最大ID:

AND id <= 8279

我明白了:

1     2012-07-18 19:00:00     1313
106     2012-07-18 20:00:00     1201
107     2012-07-19 09:00:00     118
225     2012-07-19 10:00:00     196
421     2012-07-19 11:00:00     2
423     2012-07-19 12:00:00     38
461     2012-07-19 13:00:00     20
490     2012-07-20 15:00:00     85
575     2012-07-20 16:00:00     483
1060     2012-07-20 17:00:00     1200
2260     2012-07-20 18:00:00     1200
5859     2012-07-20 21:00:00     1201
7060     2012-07-20 22:00:00     1220

这些数字彼此不同。有点傻。

编辑:这是我的表结构:

id  t_stamp             bID      viewip                 unique
1   2012-07-18 19:22:20     5    192.168.1.1        1
2   2012-07-18 19:22:21     1    192.168.1.1        1
3   2012-07-18 19:22:22     5    192.168.1.1        0
4   2012-07-18 19:22:22     3    192.168.1.1        1

2 个答案:

答案 0 :(得分:1)

您不按ID分组,我认为您打算这样做。

尝试:

SELECT id, DATE_FORMAT(t_stamp, '%Y-%m-%d %H:00:00') as date, COUNT(*) as count
FROM test_ips
WHERE id > 0
    AND viewip != ""
GROUP BY id, DATE_FORMAT(t_stamp, '%Y-%m-%d %H:00:00')
ORDER BY t_stamp;

答案 1 :(得分:0)

您的查询不一致。

在您的选择语句中,您显示的是完整日期。

但是您按小时分组数据。因此,您的计数语句将计算当天每小时的所有数据。

举一个例子来看你的第一个结果:

1 2012-07-18 19:00:00 1313

1313的计数包含一小时19:00的所有日期(7 / 18,7 / 19,7 / 20,7 / 21,7 / 22等)的记录。

但是你设置查询的方式看起来应该是2012-07-18 19:00:00所有记录的计数。

因此,当您添加AND id&lt; = 8279“7/21的日期和7/20的某些日期或不再计算时,您的计数值现在会降低。

我猜你的意思是分组日期和时间,而不仅仅是小时。