2015-11-06 48 views
0

我有一個查詢,選擇從當前時間過去1小時創建的記錄。MySQL如何正確選擇日期字段在今天之前和過去1小時的時間

select ts from <table_name> where ts >= DATE_SUB(NOW(), interval 1 hour); 

我可以7天前也選擇日期使用

select count(*) from <table_name> where ts >= DATE_SUB(NOW(), interval 7 day);

如何使用這兩個日期功能獲取從當前時間起的7天之前和從當前時間過去1小時之前的記錄。

例如,如果現在時間是2015-11-06 10:03:00那麼我怎樣才能獲取2015-10-30 09:03:00到2015-10-30 10:03之間的時間數據:00

我想這樣的事情,但它給語法錯誤:

select ts from <table_name> where ts >= DATE_SUB(DATE(NOW()), INTERVAL 7 DAY), interval 1 hour) 
select ts from <table_name> where ts >= DATE_SUB(NOW(), INTERVAL 7 DAY), interval 1 hour) 

回答

4

你的例子有語法錯誤(太多閉括號))。如果您想使用DATE_SUB(),則需要使用兩次。爲了得到一個時間和彼此之間的條目,使用WHERE ... BETWEEN ... AND ...

您可以使用此:

SELECT ts 
FROM iv_split_skill_metrics 
WHERE ts BETWEEN 
    DATE_SUB(
     DATE_SUB(DATE(NOW()), INTERVAL 7 DAY), 
     interval 1 hour) 
    AND 
    DATE_SUB(DATE(NOW()), INTERVAL 7 DAY) 

,或者甚至更好,跳過DATE_SUB()完全,只是做減法,這樣的:

SELECT ts 
FROM iv_split_skill_metrics 
WHERE ts BETWEEN NOW() - INTERVAL 7 DAY - INTERVAL 1 HOUR 
    AND NOW() - INTERVAL 7 DAY 

編輯:由於某種原因,我在發佈此文章後編輯了您的問題,並用替換了在你的問題,但上面的例子將工作不管。當然,只需使用正確的表格和列名即可!

編輯2:我現在要7天加1小時前至7天的條目前看到的。我調整了我的答案,告訴你如何做到這一點。

1

你的目標不是100%清楚,但只是我的嘗試:

SELECT ts 
FROM table_name 
WHERE ts >= DATE_ADD(DATE_ADD(NOW(), INTERVAL -7 DAY), INTERVAL -1 HOUR) 
    AND ts <= DATE_ADD(NOW(), INTERVAL -7 DAY); 

但形式表現角度來看,這查詢將要快得多:

http://sqlfiddle.com/#!9/9edd1/2

SET @end = DATE_ADD(NOW(), INTERVAL -7 DAY); 
SET @start = DATE_ADD(@end, INTERVAL -1 HOUR); 

SELECT ts 
    FROM table_name 
    WHERE ts BETWEEN @start AND @end; 
相關問題