【问题标题】:Fetch MySQL rows + one before condition获取 MySQL 行 + 一个前置条件
【发布时间】:2012-03-05 10:57:03
【问题描述】:

我有一个时间日志表,其中所有条目都带有时间戳和事件。

现在我想选择特定事件之后的所有行和该事件之前(ORDER BY time_stamp)的一行。

我可以通过多个查询轻松实现这一点,但是只有一个查询可以吗?

使用多个查询

SELECT time 
FROM   table 
WHERE  event LIKE '%event_to_fint%' 

SELECT event 
FROM   table 
WHERE  time<'time from last query' 
LIMIT  1 
ORDER BY 
       time DESC 

【问题讨论】:

  • 您能否发布您的多个查询
  • SELECT time FROM table WHERE event LIKE '%event_to_fint%'
    + SELECT event FROM table WHERE time 并结合

标签: mysql sql


【解决方案1】:

一种选择是

  • 使用常规选择来选择您需要的time 记录。
  • 将此结果与检索最大 time 的选择合并,其中最大 time 小于常规选择中的最小 time

SQL 语句

SELECT  time
FROM    table
WHERE   event LIKE '%event_to_fint%'
UNION ALL
SELECT  MAX(time)
FROM    table
WHERE   time < (
                 SELECT  MIN(time)
                 FROM    table
                 WHERE   event LIKE '%event_to_fint%'
               )

【讨论】:

    【解决方案2】:

    这个解决方案不太好,但很有效:

    SELECT * 
    FROM table
    WHERE <condition_A>
    ORDER BY <condition_B>
    LIMIT (SELECT COUNT(*) 
           FROM table
           WHERE <condition_A>
           )+1
    

    【讨论】:

    • 不,不起作用。您不能在 LIMIT 子句中进行计算。即使是 LIMIT 1+1 也会导致错误。至少在 MySQL 5.1 中。就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2022-11-15
    • 2014-10-10
    • 1970-01-01
    • 2019-06-03
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多