0

我不知道为什么我的数字彼此相差很大。

没有最大 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
4

2 回答 2

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;
于 2012-08-21T16:40:38.923 回答
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 <= 8279" 7/21 的日期和 7/20 的某些日期或不再计算在内时,您的计数值现在较低。

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

于 2012-08-21T17:08:37.017 回答