我试图建立一个匹配系统,选择两个不同查询的最高值。我在网站上看了其他答案,都没有帮助。我想比较的是:
我想从type
等于的version
列中获取最大值,例如"type1
"。我还想从version
列中获取最大值,其中type
等于"type2
"。然后我想将这些与PHP进行比较,并找出type2
的version
是否高于type1
的version
。我能做到吗?
编辑:这个问题已经被Brian Demilia回答了。主持人可以将其标记为已回答吗?
我相信这会达到你的目的:
select version, type
from tbl
where version =
(select max(version) from tbl where type in ('type1', 'type2'))
如果max(version)与type1记录相关联,类型结果列将显示'type1',如果max(version)与type2记录相关联,则显示'type2'。
如果您想知道type1的最高版本和type2的最高版本(也就是说,您希望将值返回到输出中),并让查询确定哪个更高,您可以使用以下命令:
select t1.version as type1_max_version,
t2.version as type2_max_version,
case when t1.version > t2.version
then t1.version
else t2.version end as highest_version_num,
case when t1.version > t2.version
then 'type1'
else 'type2' end as highest_version_type
from tbl t1
cross join tbl t2
where t1.version = (select max(version) from tbl where type = 'type1')
and t2.version = (select max(version) from tbl where type = 'type2')
根据您的评论,如果您只想过滤那些名为"usrips"的字段具有特定值的行,您可以使用以下命令。这还假设您希望将此过滤器应用于type1和type2行。如果不是这样,请告诉我。此外,如果您想在WHERE子句中添加额外的字段,您还需要将它们添加到t1和t2之间的JOIN子句中,否则您必须重复两次WHERE子句中的所有内容,一次用于t1,一次用于t2
select t1.version as type1_max_version,
t2.version as type2_max_version,
case when t1.version > t2.version
then t1.version
else t2.version end as highest_version_num,
case when t1.version > t2.version
then 'Firewall'
else 'FBypass' end as highest_version_type
from tbl t1
join tbl t2 on t1.usrips = t2.usrips
where t1.version = (select max(version) from tbl
where type = 'Firewall' and usrips LIKE '%1.1.1.1%')
and t2.version = (select max(version) from tbl
where type = 'FBypass' and usrips LIKE '%1.1.1.1%')
and t1.usrips LIKE '%1.1.1.1%'
参见小提琴:http://sqlfiddle.com/#!2/2525a/7/0
这是你想要的吗?
select max(case when t.type = 'type1' then version end) as type1_maxversion
max(case when t.type = 'type2' then version end) as type2_maxversion
from table t;
可以在SQL中进行比较,最简单的方法是使用子查询:
select (case when type1_maxversion is null then 'No Type1'
when type2_maxversion is null then 'No Type2'
when type1_maxversion > type2_maxversion then 'Type1 Bigger'
when type2_maxversion > type1_maxversion then 'Type2 Bigger'
else 'equal'
end) as comp
from (select max(case when t.type = 'type1' then version end) as type1_maxversion
max(case when t.type = 'type2' then version end) as type2_maxversion
from table t
) x;