1

我有一个存储用于速率限制目的的操作的表。我想要做的是获取具有“key_action”(开始限速时间的操作)的最新行,然后找到该日期之后的所有条目。

我目前能想到的唯一方法是使用两个查询:

  1. SELECT created_at FROM actions WHERE key_action=1 ORDER BY created_at DESC LIMIT 1

  2. SELECT * FROM actions WHERE created_at >= (created_at from query 1)

是否可以将这两个查询合并为一个?

4

2 回答 2

2

您可以使查询 1 成为查询 2 的子查询。

SELECT * 
    FROM actions 
    WHERE created_at >= (SELECT MAX(created_at) 
                             FROM actions 
                             WHERE key_action=1)
于 2011-02-10T16:20:56.010 回答
1

我原以为@Joe Stefanelli 的回答是正确的,但是在 WHERE 语句的子查询中不允许使用限制。从这个解决方法,我把这个查询放在一起(未经测试)

SELECT * FROM actions 
JOIN (SELECT created_at FROM actions WHERE key_action=1 ORDER BY created_at DESC LIMIT 1) createdActions
WHERE actions.created_at >= createdActions.created_at
于 2011-02-10T16:36:30.170 回答