我正在尝试设置一个匹配系统,用于选择两个不同查询的最高值。我查看了网站上的其他答案,他们没有帮助。我基本上想要比较的是:
我想从version
等于type
的列中获取最高值,例如“type1
”。我还想从version
列中获取type
等于“type2
”的最高值。然后,我想将这些与PHP进行比较,并找出type2
的{{1}}是否高于version
的{{1}}。有没有办法可以做到这一点?
编辑: Brian Demilia已经回答了这个问题。主持人可以将其标记为已回答吗?
答案 0 :(得分:2)
我相信这会做你想要的:
select version, type
from tbl
where version =
(select max(version) from tbl where type in ('type1', 'type2'))
如果max(版本)与type1记录关联,则类型结果列将显示'type1';如果max(版本)与type2记录关联,则类型结果列将显示'type2'。
如果您想知道type1的最高版本和type2的最高版本(例如,您希望将值返回到输出中),并让查询识别哪一个更高,则可以使用以下内容:< / p>
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%'
答案 1 :(得分:1)
这是你想要的吗?
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;