使用MAX作为筛选器的Interbase SQL语句?

使用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

是否可以使用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 
              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