需要满足以下条件的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(条件列),则返回该记录,否则不显示任何记录。
实际:显示所有记录,包括真假条件
答案 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)
[建议在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
这种方法比使用内部子查询更有效。尤其是在大桌子上。
答案 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'