0

我有一个例程,每隔几个小时运行一次,并记录用户配置的备份作业。每个作业都会在表中创建一个条目,条目数可以是从 0 到无穷大的任意值(完全取决于用户拥有的作业数)。

在下面的示例中,用户当前配置了三个备份作业,但我使用的 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 虚拟化”条目,因为用户在最近的数据提取中不再配置该条目。它应该只提取具有最新时间戳的条目。

谢谢!

4

1 回答 1

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')
;

或者,如果您需要“时间范围”解决方案,请在 snapshot_time 上添加额外的 WHERE 子句

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

于 2013-02-04T16:29:39.353 回答