【发布时间】:2012-02-01 19:13:37
【问题描述】:
我想获取具有相同日期的行数。但是一秒钟必须可以忽略不计。
例如; 2012-01-03 13:12:28 和 2012-01-03 13:12:27 应该被认为是相同的。
(我的表名是myTable,日期时间列名是date)
希望你能帮帮我..
【问题讨论】:
我想获取具有相同日期的行数。但是一秒钟必须可以忽略不计。
例如; 2012-01-03 13:12:28 和 2012-01-03 13:12:27 应该被认为是相同的。
(我的表名是myTable,日期时间列名是date)
希望你能帮帮我..
【问题讨论】:
很简单:
SELECT * FROM myTable WHERE date >= '2012-01-03 13:12:27' AND date <= '2012-01-03 13:12:28';
如果你想从一个变量构建它,你可以这样做:
$date = '2012-01-03 13:12:27';
$timestamp = strtotime($date);
$mysqli = new mysqli();
// Note: allowing 1 second either side, this is up to you
$lower = date('Y-m-d H:i:s', $timestamp - 1);
$upper = date('Y-m-d H:i:s', $timestamp + 1);
$stmt = $mysqli->prepare('SELECT * FROM myTable WHERE date >= ? AND date <= ?');
$stmt->bind_param('ss', $lower, $upper);
$stmt->execute();
编辑:根据您在下面的评论,以下 SQL 应该返回您所追求的内容。请注意,如果日期包含“2012-01-03 13:12:28”,它将同时计入 :27 和 :28。
SELECT
upper_date,
COALESCE(lower_count, 0) + upper_count
FROM
(SELECT
date AS upper_date,
COUNT(1) AS upper_count
FROM myTable
GROUP BY date
) AS upper
LEFT JOIN
(SELECT
date - INTERVAL 1 SECOND AS lower_date,
COUNT(1) AS lower_count
FROM myTable
GROUP BY date
) AS lower
ON upper.upper_date = lower.lower_date
【讨论】:
SELECT p1.date, p1.sex, p2.date, p2.sex, p1.species ......
FROM table_name AS p1, table_name AS p2
WHERE p1.date-p2.species in(0,1);
对于这种情况,我们使用带有别名的表的自连接...由于您的条件是日期之间的差异不应超过 1,因此可以...
我假设你已经将日期存储为mysql datetime...执行“-”操作..
【讨论】:
试试这个:
SELECT count(*)
FROM myTable
WHERE DATE_FORMAT(date, '%Y-%m-%d %H:%i') = '2012-01-03 13:12';
或者对于一个组相关的 COUNT:
SELECT DATE_FORMAT(date, '%Y-%m-%d %H:%i') as myDate, count(*)
FROM myTable
GROUP BY myDate;
【讨论】:
WHERE DATE('2012-01-03 01:01:01') = DATE(my_date)。
WHERE DATE(NOW()) = myDate 来检查,例如,今天,或使用 DATE_ADD,从今天起 x 天 - 只是在旁注中,)
如果您只需要计算每个日期的行数,那将是简单的 GROUP BY:
SELECT COUNT(*) as cnt, DATE_FORMAT(date, '%Y-%m-%d') as my_date
FROM myTable
GROUP BY my_date
但是根据您的问题,您不仅需要计算日期内的行数,而且还需要计算不是单个事件而是一系列事件。在这种情况下,您需要定义究竟是什么系列。说一秒钟内的两个事件应该算作一个。如果有四个彼此之间距离为 0.7 的事件怎么办?在这种情况下,我建议分两步计算系列。
按时间排列的一阶事件:
SELECT * FROM myTable WHERE date >= XXXX and date < YYYY ORDER BY date ASC
然后在应用程序端,您可以计算两条记录之间的差距,如果两个关闭事件之间的距离超过一秒,则增加计数器。
不要忘记在date 字段上添加索引以加快查询速度。
【讨论】: