Php-MySql查询,根据日期时间选择数据
我想获取具有相同日期的行数。但是,一秒钟必须忽略不计。Php-MySql查询,根据日期时间选择数据
例如; 2012-01-03 13:12:28和2012-01-03 13:12:27应该被认为是一样的。
(我有一个表名是myTable
和datetime列名是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的日期时间......执行“ - ”运行..
您可能回答了错误的问题。 – konsolenfreddy 2012-01-03 19:30:32
尝试这一次,
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;
我认为你甚至不需要DATE_FORMAT字段,你可以使用'WHERE DATE('2012-01-03 01:01:01')= DATE(my_date)'为每一行2012年01月03日 – kontur 2012-01-03 20:07:48
不错@kontur,我刚刚在我的本地尝试过,它工作。这对我的第一个查询来说是一个可行的选择。 – Aaron 2012-01-03 20:19:08
您可能还喜欢'WHERE DATE(NOW())= myDate'来检查,例如今天或DATE_ADD,从今天开始x天 - 仅在一个旁注上) – kontur 2012-01-03 20:47:53
如果你只需要计算每个日期的行数这将是简单的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
字段添加索引来加速此查询。
但是,我不知道我的表中的日期。我想了解具有相似日期的行数(根据年,日,小时分) – iremce 2012-01-03 19:41:41