-3

我想在一个条件为真时从表中选择一些东西,

SELECT * FROM (SELECT * FROM`table1` `t1` ORDER BY t1.date) `t2` WHILE t2.id!=5

while condition为假时,它停止选择下一行。

请帮助我,我已经搜索了很多类似的东西,stackoverflow但我无法得到它。

请不要告诉我where,我想要 sql 中的解决方案而不是 php 或其他任何东西

好的,真正的问题在这里

SELECT *,(SELECT SUM(t2.amount) FROM (select * from transaction as t1 order by t1.date) `t2`) as total_per_transition FROM transaction 

在这里我想计算每笔交易的总余额

4

1 回答 1

2

首先找到条件失败的第一个日期,所以 where id=5

SELECT date 
FROM table1
WHERE id = 5 
ORDER BY date
  LIMIT 1

然后将上面的生成一个派生表(我们称之为lim)并将其连接到原始表以获取具有先前日期的所有行:t.date < lim.date

SELECT t.*
FROM table1 AS t
  JOIN
  ( SELECT date 
    FROM table1
    WHERE id = 5 
    ORDER BY date
      LIMIT 1
  ) AS lim
    ON t.date < COALESCE(lim.date, '9999-12-31') ;

COALESCE()适用于根本没有行的情况id=5- 在这种情况下,我们想要表中的所有行。

于 2013-05-04T07:27:26.107 回答