Mysql
基於 NOW() 選擇結果
我的查詢如下:
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 | +---------------------+