2013-02-04 81 views
0

我有一個例程,每隔幾個小時運行一次並記錄用戶配置的備份作業。每個作業都會在表格中創建一個條目,條目數量可以是從0到無窮大的任何值(完全取決於用戶具有的作業數量)。PHP MySQL maxTime查詢

在下面的示例中,用戶目前配置了三個備份作業,但我使用的SQL查詢是在一週前從數據拉取備份。我無法弄清楚如何調整我的查詢,以便我只從最近的時間戳中獲取條目而不用做LIMIT(我不能使用LIMIT,因爲我永遠不知道將出現的條目數):

SELECT BACKUP_SET_ID, BACKUP_SET_TYPE, Max(SNAPSHOT_TIME) maxTime 
FROM TABLE_snapshots_backupsets 
WHERE ACCOUNT_ID='6000001' 
GROUP BY BACKUP_SET_ID; 

輸出:

+---------------+----------------------------------+---------------------+ 
| BACKUP_SET_ID | BACKUP_SET_TYPE     | maxTime    | 
+---------------+----------------------------------+---------------------+ 
| 1359127993672 | FILE        | 2013-02-04 08:00:01 | 
| 1359145357475 | FILE        | 2013-02-04 08:00:01 | 
| 1359145395067 | VMware Virtualization   | 2013-02-04 08:00:01 | 
| 1359145404910 | Microsoft Windows Virtualization | 2013-01-27 12:00:01 | 
+---------------+----------------------------------+---------------------+ 
4 rows in set (0.00 sec) 

因此,在上述情況下,我想是的查詢不拉「的Microsoft Windows虛擬化」條目,因爲用戶不再具有配置爲最新的一個數據拉。它應該只是用最新的時間戳來拉入條目。

謝謝!

回答

0

如果您只想共享相同的時間戳最近的條目中,重新排列邏輯位:

SELECT BACKUP_SET_ID, 
     BACKUP_SET_TYPE, 
     SNAPSHOT_TIME 
FROM TABLE_snapshots_backupsets 
WHERE SNAPSHOT_TIME = (SELECT Max(SNAPSHOT_TIME) 
         FROM TABLE_snapshots_backupsets 
         WHERE ACCOUNT_ID = '6000001') 
; 

或者,如果你需要一個「時間範圍」的解決方案,添加一個額外的WHERE上snapshot_time

條款
WHERE ACCOUNT_ID='6000001' AND SNAPSHOT_TIME > CURTIME() - INTERVAL 7 DAY 

對於其他日期處理選項:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

感謝您的答覆。當我添加WHERE子句時,我根本沒有得到任何記錄...... – Jason

+0

謝謝!好的 - 重新排列的查詢似乎有訣竅。我必須將ACCOUNT_ID添加到第一個WHERE子句,以使其僅返回該帳戶的條目:SELECT BACKUP_SET_ID,BACKUP_SET_TYPE,SNAPSHOT_TIME FROM TABLE_snapshots_backupsets WHERE ACCOUNT_ID ='6000001'AND SNAPSHOT_TIME =(SELECT MAX(SNAPSHOT_TIME)FROM TABLE_snapshots_backupsets WHERE ACCOUNT_ID ='6000001')GROUP BY BACKUP_SET_ID;' – Jason

+0

噢,現在GROUP BY可以被刪除,因爲主查詢中沒有聚合函數了。編輯答案。 –