我在编写查询时遇到问题,该查询在找到另一列的最小值后给了我其他字段。我试过这个:
Select WorkOrder, min(Job), Details
From Jobs
Group by WorkOrder
但它不起作用。
这为我提供了WorkOrder的最低职位数列表:
Select WorkOrder, min(Job)
From Jobs
Group by WorkOrder
我想要具有最低职位编号的订单项的详细信息。我做错了什么?
答案 0 :(得分:0)
您可以尝试此查询
Select WorkOrder, min(Job), Details
From Jobs
Group by WorkOrder, Details
答案 1 :(得分:0)
你应该在你的条件中添加min(),就像这样
Select * From Jobs Where Job in
(Select min_job From (Select WorkOrder ,min(Job) as min_job From Jobs
Group by WorkOrder)
)
答案 2 :(得分:0)
当您使用GROUP BY子句时,select语句中的所有内容都必须是聚合函数(如min,max,ect)或必须包含在GROUP BY子句中。详细信息未包含在GROUP BY子句中,因此该语句将无法编译。如果在GROUP BY子句中包含Details,您将获得WorkOrder和Details的每个组合的min(作业),这可能不是您想要的。
有几种方法可以解决这个问题。 IMO最简单的方法是选择你的min(作业)和Workorder,然后将结果加入到jobs表中并选择细节。要执行此操作,您的作业表必须具有唯一的主键。
SELECT
minWorkOrder.WorkOrder
minWorkOrder.MinJob
Jobs.Details
FROM
(Select Key, WorkOrder, min(Job) as MinJob
From Jobs
Group by Key, WorkOrder) AS minWorkOrder
INNER JOIN Jobs
ON Jobs.Key = minWorkOrder.Key
如果您的桌子没有唯一的密钥,那么事情会变得更加棘手。在此查询的范围内,可能安全地假设min(Job)和WorkOrder的每个组合都是唯一的。你可以加入这两个领域,你应该得到正确的答案。
SELECT
minWorkOrder.WorkOrder
minWorkOrder.MinJob
Jobs.Details
FROM
(Select WorkOrder, min(Job) as MinJob
From Jobs
Group by WorkOrder) AS minWorkOrder
INNER JOIN Jobs
ON Jobs.Job = minWorkOrder.MinJob AND Jobs.WorkOrder = minWorkOrder.WorkOrder
答案 3 :(得分:0)
你应该试试这个:
SELECT WorkOrder, Details
from Jobs
where Job IN (SELECt min(Job), WorkOrder from Jobs GROUP BY WorkOrder);
答案 4 :(得分:0)
我和我所在部门的工程师一起工作,提供了这个有效的答案:
Select A.WorkOrder, A.Job, A.Details
From(Select WorkOrder, Job, Details, Row_Number()
over( Partition by WorkOrder Order by Job ASC) as Num
From Jobs)A
where A.Num = 1
答案 5 :(得分:0)
with cte as
(
select workorder,Job, Details, rank() over (partition by workorder order by job asc) as rnk
from
Jobs
)
select workorder,Job, Details from cte
where rnk = 1
在这里,我们按照每个工作订单的升序对作业列中的值进行排名。最后WHERE子句rnk = 1仅获取每个工作订单的最小值的作业。如果工作订单具有多个具有相同值的作业,则RANK()将为它们分配相同的等级。因此,如果工作订单具有多个具有最小值的作业,则将返回所有这些作业。