我想獲取具有相同日期的行數。但是,一秒鐘必須忽略不計。Php-MySql查詢,根據日期時間選擇數據
例如; 2012-01-03 13:12:28和2012-01-03 13:12:27應該被認爲是一樣的。
(我有一個表名是myTable
和datetime列名是date
)
我希望你能幫助我..
我想獲取具有相同日期的行數。但是,一秒鐘必須忽略不計。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