SQL Server-按最高值筛选

SQL Server-按最高值筛选,sql,sql-server,filter,max,Sql,Sql Server,Filter,Max,我正在创建一个将几个表连接在一起的报告。除了一个方面,一切都完美地结合在一起。我需要cost2字段仅显示最高成本。基本上,一个项目在生产过程中会经历几次成本变化,最终成本最高。我需要查询一下最终的成本。我知道这是一个简单的解决方案,但我在这方面做了比我应该做的更多的努力 以下是我的查询的简化示例: MAX函数没有按我的预期工作 SELECT DISTINCT table1.item_no, table2.quantity, tabl

我正在创建一个将几个表连接在一起的报告。除了一个方面,一切都完美地结合在一起。我需要cost2字段仅显示最高成本。基本上,一个项目在生产过程中会经历几次成本变化,最终成本最高。我需要查询一下最终的成本。我知道这是一个简单的解决方案,但我在这方面做了比我应该做的更多的努力

以下是我的查询的简化示例: MAX函数没有按我的预期工作

SELECT DISTINCT table1.item_no,
                table2.quantity,
                table2.date,
                table3.cost1,
                MAX(table4.cost2)
FROM table1
     INNER JOIN table2 ON table2.item_no = table1.item_no
     INNER JOIN table3 ON table3.item_no = table1.item_no
     INNER JOIN table4 ON table4.item_no = table1.item_no
WHERE table3.cost1 <> 0
GROUP BY table1.item_no,
         table2.quantity,
         table2.date,
         table3.cost1  
我想你想要排号:

因为您似乎希望每个项目有一行,所以分区仅包含项目编号。您将获得最高成本行的所有其他列。

我想您需要行号:

SELECT table1.item_no,
       table2.quantity,
       table2.date,
       table3.cost1,
       table4.cost2
FROM table1
     INNER JOIN table2 ON table2.item_no = table1.item_no
     INNER JOIN table3 ON table3.item_no = table1.item_no
     INNER JOIN table4 ON table4.item_no = table1,item_no
WHERE table3.cost1 <> 0
AND table4.cost4 = (SELECT MAX(a.cost4 ) 
                    FROM table4 a
                    WHERE
                        table4.item_no=a.item_no
                        GROUP BY a.item_no
                    )

因为您似乎希望每个项目有一行,所以分区仅包含项目编号。您将获得最高成本行的所有其他列。

您如何确定最终成本?最后一个内部连接上的输入错误是逗号而不是句点吗?表1,项目号应为表1。您定义的项目号不能按我的预期工作???如果我打算根据模糊的描述为您的查询定义抛出一些伪代码,它将与您发布的内容一模一样。帮助我们了解问题,我们可以帮助您找到解决方案。这是一个很好的起点@vkp这是表4.cost4中对一个项目的最高迭代。@xQbert编辑过,谢谢。您如何确定最终成本?最后一个内部连接上的输入错误是逗号而不是句点吗?表1,项目号应为表1。您定义的项目号不能按我的预期工作???如果我打算根据模糊的描述为您的查询定义抛出一些伪代码,它将与您发布的内容一模一样。帮助我们了解问题,我们可以帮助您找到解决方案。这是一个很好的起点@vkp这是表4.cost4中对一个项目的最高迭代次数。@xQbert编辑,谢谢。
SELECT table1.item_no,
       table2.quantity,
       table2.date,
       table3.cost1,
       table4.cost2
FROM table1
     INNER JOIN table2 ON table2.item_no = table1.item_no
     INNER JOIN table3 ON table3.item_no = table1.item_no
     INNER JOIN table4 ON table4.item_no = table1,item_no
WHERE table3.cost1 <> 0
AND table4.cost4 = (SELECT MAX(a.cost4 ) 
                    FROM table4 a
                    WHERE
                        table4.item_no=a.item_no
                        GROUP BY a.item_no
                    )