2013-02-11 40 views
0

我使用該數據庫表:從我-SQL數據庫最後30分鐘內,並具有以下細節Retrive數據

Column Number | Column name | Data type 
--------------------------------------------- 
1    | cardid  | int(5) 
2    | price  | decimal(5,2) 
3    | isbuyprice | int(1) 
4    | date  | date 
5    | time  | time 

現在,我想要檢索其插入到表中的最後一個數據30分鐘。我試着用下面的代碼,但它檢索到的我,我的表中的所有行:

"SELECT * FROM table1 WHERE time > (now() - INTERVAL 30 MINUTE)"; 

回答

1
"SELECT * FROM table1 WHERE time > (time(now()) - INTERVAL 30 MINUTE) 
and date=CURDATE()"; 

最好的解決辦法是,如果你能夠改變你的數據庫表,然後更改日期字段時間戳和刪除時間字段。那麼上面的查詢將起作用。否則在當前的數據庫結構中使用下面的代碼。

"SELECT * FROM table1 WHERE time > time(time(now())-interval 30 minute) 
and date=CURDATE()"; 

認爲它會工作。謝謝。

+1

不,這是行不通的,例如當NOW()爲'2013-02-10 00:15:00'時,它不會返回最後30分鐘的行。 – 2013-02-11 07:44:57

+0

該解決方案對我無效。 – user1929236 2013-02-11 08:14:12

+0

@ user1929236我的答案被編輯。 – ripa 2013-02-11 11:14:10

0

入住這

SELECT * FROM table1 
WHERE date=CURDATE() AND TIME_TO_SEC(time) > TIME_TO_SEC(CURRENT_TIME()) - 1800 
+0

此解決方案對我無效..... – user1929236 2013-02-11 08:14:31

+0

已過時答案 – 2013-02-11 08:40:25

1

你有兩個分開的領域,一個日期,一個是時間,所以你可以使用這樣的事情:

SELECT * 
FROM table1 
WHERE 
    UNIX_TIMESTAMP(date) + TIME_TO_SEC(time) >= 
    UNIX_TIMESTAMP(NOW() - INTERVAL 30 MINUTE) 

UNIX_TIMESTAMPdate轉換成秒自1970-01-01以來,我們將時間部分的秒數與time_to_sec相加,並將結果與​​NOW()-INTERVAL 30 MINUTE進行比較,轉換爲秒數。

0
Select * from table1 where concat (date, ' ', time) > (now() - interval 30 minute) 
1
SELECT * FROM table1 WHERE time BETWEEN CURTIME() AND TIME(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) 

希望這可以幫助你