[SELECT * FROM table while condition = true?

问题描述 投票:-3回答:1

我想在一个条件为真时从表中选择某项,

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 

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

mysql sql
1个回答
2
投票

首先找到条件失败的第一个日期,所以在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根本没有行的情况,在这种情况下,我们希望表中的所有行。

© www.soinside.com 2019 - 2024. All rights reserved.