【问题标题】:Overlapping counts for a specific time range特定时间范围内的重叠计数
【发布时间】:2015-08-17 17:40:59
【问题描述】:

我有一个查询,我试图在数据库中查找某个时间范围内查看某项内容的次数。

这是我目前的查询:

USE DB1
SELECT DISTINCT NAME,
COUNT(*) AS COUNT
FROM LOGS
WHERE EVENT = 'Viewed'
AND TIME BETWEEN '2015-04-22 00:00:00.000' AND '2015-07-24 00:00:00.000'
GROUP BY NAME
ORDER BY COUNT DESC;

这个查询成功地告诉我在这 3 个月的范围内查看了多少次,但是当我将时间范围缩短到三个不同的查询时,该特定行从:

TIME BETWEEN '2015-04-22 00:00:00.000' AND '2015-05-22 00:00:00.000';
TIME BETWEEN '2015-05-22 00:00:00.000' AND '2015-06-22 00:00:00.000';
TIME BETWEEN '2015-06-22 00:00:00.000' AND '2015-04-24 00:00:00.000';

然后,当我将不同的值相加时,它们不相等。事实上,它们比我在三个月范围内的第一个查询中获得的行数要高得多。我假设某些值是重叠的。我怎样才能解决这个问题?我检查了我的工作,我很确定第一个查询在时间范围内给了我正确的行数,但我需要更具体的数据

【问题讨论】:

    标签: sql datetime time overlap between


    【解决方案1】:
    X BETWEEN Y AND Z 
    

    翻译成

    X >= Y AND X <= Z
    

    因此,您应该对整个范围内的期间使用不同的查询,例如:

    TIME >= '2015-04-22 00:00:00.000' AND TIME < '2015-05-22 00:00:00.000';
    TIME >= '2015-05-22 00:00:00.000' AND TIME < '2015-06-22 00:00:00.000';
    TIME >= '2015-06-22 00:00:00.000' AND TIME <= '2015-07-24 00:00:00.000';
    

    上一个时间段的逻辑取决于您...例如,您可以将其重新排列为:

    TIME >= '2015-06-22 00:00:00.000' AND TIME < '2015-07-25 00:00:01.000';
    

    【讨论】:

    • 感谢您的回复,但是这给了我与 BETWEEN 命令完全相同的输出。
    【解决方案2】:

    col BETWEEN a AND b 被计算为a &lt;= col &lt;= b,因此您的时间范围内有一个重叠间隔

    将这个从午夜改为午夜前一秒:

    TIME BETWEEN '2015-04-22 00:00:00.000' AND '2015-04-22 23:59:59.999';
    TIME BETWEEN '2015-05-22 00:00:00.000' AND '2015-05-22 23:59:59.999';
    TIME BETWEEN '2015-06-22 00:00:00.000' AND '2015-04-24 23:59:59.999';
    

    更新

    试试这个:

    TIME BETWEEN '2015-04-22 00:00:00' AND '2015-04-22 23:59:59';
    TIME BETWEEN '2015-05-22 00:00:00' AND '2015-05-22 23:59:59';
    TIME BETWEEN '2015-06-22 00:00:00' AND '2015-04-24 23:59:59';
    

    【讨论】:

    • TIME 是什么 coltype?
    • TIME 的数据类型是日期时间
    • 你试过我更新的答案了吗? MySQL 无法处理 TIME 中的毫秒数,请参阅 dev.mysql.com/doc/refman/5.6/en/time.html
    • 这只是给我一天,我需要整个月的数据。我相信日期已经过去了。
    • 它也提供了比我之前的查询更多的行。我在 MS SQL Server 08 上
    猜你喜欢
    • 2023-03-03
    • 2022-09-24
    • 2016-09-08
    • 2023-01-19
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多