Mysql

基於 NOW() 選擇結果

  • June 20, 2018

我的查詢如下:

SELECT count(db.user_data.page_url) AS total_urls, db.authors.author
FROM db.authors
LEFT JOIN db.user_data ON db.authors.author_id = db.user_data.id
WHERE (db.user_data.date > (now() - INTERVAL 30 MINUTE))
AND db.user_data.domain LIKE '%example.com%'
GROUP BY author;

它會返回now()30 分鐘和最後 30 分鐘之間的所有結果,這很好。但這些結果是基於從目前時刻(以秒為單位)開始的 30 分鐘的周期(間隔)。

如何選擇基於的所有行now() - INTERVAL 30 MINUTE,但包括最後 30 分鐘的所有結果(包括在內)?因為現在間隔正在“移動”目前時刻+最後 30 分鐘。所以每一秒我都會得到不同的結果,因為“滑動”,“移動”間隔?

NOW()從 的值中減去秒部分,NOW()您將獲得標記目前分鐘開始的時間戳。現在你可以減去你的時間間隔來得到 30 分鐘前的開始時間:

WHERE (date > (NOW() - **INTERVAL SECOND(NOW()) SECOND** - INTERVAL 30 MINUTE))

另一種解決方案是將日期更改為時間戳,刪除除以 60 的提示,如下所示:

select now();
+---------------------+
| now()               |
+---------------------+
| 2018-06-18 14:46:36 |
+---------------------+
1 row in set (0.00 sec)

select from_unixtime((unix_timestamp((now() - INTERVAL 30 MINUTE))div 60)*60) as 30_min_ago;
+---------------------+
| 30_min_ago          |
+---------------------+
| 2018-06-18 14:16:00 |
+---------------------+

引用自:https://dba.stackexchange.com/questions/209931