使用MAX作为筛选器的Interbase SQL语句?
是否可以使用max语句在一列的max上从查询中选择某些行 我尝试了几件不起作用的事情。我试过max语句。我还发现Interbase可能不支持我在SQL Server中通常做的事情—子选择。我可能错了。我认为我们使用的是Interbase XE3 声明:使用MAX作为筛选器的Interbase SQL语句?,sql,interbase,Sql,Interbase,是否可以使用max语句在一列的max上从查询中选择某些行 我尝试了几件不起作用的事情。我试过max语句。我还发现Interbase可能不支持我在SQL Server中通常做的事情—子选择。我可能错了。我认为我们使用的是Interbase XE3 声明: SELECT PM.GUID, PM.PID, PM.MISCID, CAST((PM.YEAR) AS NUMERIC) AS THEYEAR FROM PMASTER PM
SELECT PM.GUID, PM.PID,
PM.MISCID,
CAST((PM.YEAR) AS NUMERIC) AS THEYEAR
FROM PMASTER PM
INNER JOIN SEL SL
ON SL.LGID = PM.PID
ORDER BY PM.PID,
THEYEAR
返回的数据
1244 1 21 2013
3444 1 21 2014
9888 1 21 2015
3244 3 45 2014
5144 3 45 2015
6588 3 45 2016
3324 6 73 2014
5454 6 73 2015
6758 6 74 2016
我希望使用“年度最大值”列:
返回的所需数据:
9888 1 21 2015
6588 3 45 2016
6758 6 74 2016
谢谢
瑞克好的,我想出来了。与Stackoverflow和web上其他地方的一些语句相反,Interbase确实支持Subselect。以下是我的工作解决方案:
SELECT PM.GUID, PM.PID, PM.MISCID, PM.YEAR FROM PMASTER PM
INNER JOIN SEL SL ON SL.LGID = PM.PID
WHERE AND PM.YEAR IN
(SELECT MAX(PMS.YEAR) FROM PMASTER PMS WHERE PMS.PID = PM.PID)
ORDER BY PM.PID, PM.YEAR
希望这对其他人有所帮助。这是一个严格意义上的跨数据库问题,与德尔福无关。我无法找到您期望的结果的年度最大值。2015年有3行,2016年有两行,2015年有一行,2016年有两行。我认为您需要更好地解释一下,仅在PM.PID上对resultMax进行分组。其他字段与分组无关。我认为group by子句必须包含字段列表中提到的所有列,因此此解决方案甚至无法运行。此外,我不希望所有列都像我所希望的结果集所示的那样使用PID进行聚合分组。抱歉,但我无法理解您想要什么,使用您提供的数据,这将完全返回您所提到的内容。它不起作用。我试过了。它失败,因为PM.GUID主键和PM.MISCID外键不在group by子句中。这两列包含相同PM.PID的不同值,因此无法在PM.PID上进行分组,因为处理器不知道为组选择哪个PM.GUID/PM.MISCID。这是基本的SQL分组概念。我需要结果集中的这些列,因此无法排除它们。因此,简单的SQL Server解决方案是subselect*fromSelect。
SELECT PM.GUID, PM.PID, PM.MISCID, PM.YEAR FROM PMASTER PM
INNER JOIN SEL SL ON SL.LGID = PM.PID
WHERE AND PM.YEAR IN
(SELECT MAX(PMS.YEAR) FROM PMASTER PMS WHERE PMS.PID = PM.PID)
ORDER BY PM.PID, PM.YEAR