SQL查询特定条件

时间:2019-04-04 14:10:14

标签: mysql sql

需要满足以下条件的SQL语句。 表中有3列(TableName),Sno(唯一记录),Name(有多个可以具有相同名称的记录),Condition(True,False)。 如果最后一条记录仅是true,则需要提取所有记录。

尝试过以下查询

select Sno(Max),Name,Condition 
from TableName 
where Conditon = 'True' 
group by Name,Conditon;

预期:如果最后一条记录(SNo(Max))的值= true(条件列),则返回该记录,否则不显示任何记录。

实际:显示所有记录,包括真假条件

4 个答案:

答案 0 :(得分:1)

我认为您正在寻找它:

SELECT Sno, Name, Condition 
FROM TableName 
WHERE Conditon = 'True' AND Sno=(SELECT MAX(Sno) FROM TableName);

当心类型:如果“条件”列为Boolean,WHERE子句应为

WHERE Condition IS TRUE AND ... 

答案 1 :(得分:1)

我认为这就是您想要的。
如果表是这样的:
enter image description here

[建议在MySQL中使用tinyint(1)作为布尔值。]

您可以使用以下查询:

SELECT a.*
FROM `TableName` a
LEFT JOIN `TableName` b ON(a.`Sno` < b.`Sno`
                           AND a.`Name` = b.`Name`)
WHERE a.`Conditon` = 1
  AND b.`Sno` IS NULL

获得此结果:
enter image description here

这种方法比使用内部子查询更有效。尤其是在大桌子上。

答案 2 :(得分:0)

对于条件TRUE和Sno = max(Sno),可以在子查询中使用存在的地方

select  * 
from TableName 
where exist (
  select  * 
  from TableName 
  where  Condition = 'True'  
  and  Sno = (
  select  max(Sno) 
  from TableName 
  )
)

答案 3 :(得分:0)

SELECT * 
FROM   tablename 
WHERE  sno IN (SELECT Sno(max) 
               FROM   tablename 
               GROUP  BY NAME) 
       AND condition = 'true'