首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我只需要选择我的查询的最小值

我只需要选择我的查询的最小值
EN

Stack Overflow用户
提问于 2021-03-30 23:38:49
回答 3查看 47关注 0票数 0

我在SQL Server Management Studio中创建了一个视图,该视图引入了某些数据,我只需要选择序列最小的行。例如,在屏幕截图中看到作业编号"50773-4",我只需要看到SEQ编号为2的行。我尝试按最小值分组,但无济于事。任何帮助都将不胜感激。

代码语言:javascript
复制
SELECT
    TOP (100) PERCENT dbo.Job_Operation.Job,
    MIN(dbo.Job_Operation.Sequence) AS SEQ,
    dbo.Job_Operation.Work_Center,
    dbo.Work_Center.Department
FROM
    dbo.Job_Operation
    INNER JOIN dbo.Job ON dbo.Job_Operation.Job = dbo.Job.Job
    INNER JOIN dbo.User_Values ON dbo.Job.User_Values = dbo.User_Values.User_Values
    INNER JOIN dbo.Work_Center ON dbo.Job_Operation.Work_Center = dbo.Work_Center.Work_Center
GROUP BY
    dbo.Job_Operation.Job,
    dbo.User_Values.Numeric2,
    dbo.Work_Center.UVText4,
    dbo.Job.Status,
    dbo.Job_Operation.Status,
    dbo.User_Values.Decimal1,
    dbo.Job_Operation.Work_Center,
    dbo.Work_Center.Department
HAVING
    (dbo.Work_Center.UVText4 = 'Machining')
ORDER BY
    dbo.User_Values.Decimal1 DESC,
    SEQ

在此处输入图像描述

EN

回答 3

Stack Overflow用户

发布于 2021-03-30 23:50:55

这里有一种方法:

代码语言:javascript
复制
SELECT
    TOP (100) PERCENT Job,
    Sequence AS SEQ,
    Work_Center,
    Department
FROM
( select  dbo.Job_Operation.Job,
    dbo.Job_Operation.Sequence,
    dbo.Job_Operation.Work_Center,
    dbo.Work_Center.Department,
    dbo.User_Values.Decimal1 , 
    ROW_NUMBER() over (partition by dbo.Job_Operation.Job,
                                    dbo.User_Values.Numeric2,
                                    dbo.Work_Center.UVText4,
                                    dbo.Job.Status,
                                    dbo.Job_Operation.Status,
                                    dbo.User_Values.Decimal1,
                                    dbo.Job_Operation.Work_Center,
                                    dbo.Work_Center.Department 
                                 Order by   dbo.Job_Operation.Sequence asc) rn
FROM
    dbo.Job_Operation
    INNER JOIN dbo.Job ON dbo.Job_Operation.Job = dbo.Job.Job
    INNER JOIN dbo.User_Values ON dbo.Job.User_Values = dbo.User_Values.User_Values
    INNER JOIN dbo.Work_Center ON dbo.Job_Operation.Work_Center = dbo.Work_Center.Work_Center
) tt
WHERE rn = 1
and UVText4 = 'Machining'
票数 0
EN

Stack Overflow用户

发布于 2021-03-30 23:52:33

您可以执行以下操作:

代码语言:javascript
复制
with
q as (
  SELECT
    dbo.Job_Operation.Job,
    MIN(dbo.Job_Operation.Sequence) AS SEQ,
    dbo.Job_Operation.Work_Center,
    dbo.Work_Center.Department,
    dbo.User_Values.Decimal1
  FROM
    dbo.Job_Operation
    INNER JOIN dbo.Job ON dbo.Job_Operation.Job = dbo.Job.Job
    INNER JOIN dbo.User_Values 
      ON dbo.Job.User_Values = dbo.User_Values.User_Values
    INNER JOIN dbo.Work_Center 
      ON dbo.Job_Operation.Work_Center = dbo.Work_Center.Work_Center
  GROUP BY
    dbo.Job_Operation.Job,
    dbo.User_Values.Numeric2,
    dbo.Work_Center.UVText4,
    dbo.Job.Status,
    dbo.Job_Operation.Status,
    dbo.User_Values.Decimal1,
    dbo.Job_Operation.Work_Center,
    dbo.Work_Center.Department
  HAVING
    (dbo.Work_Center.UVText4 = 'Machining')
),
r as (
  select *,
    row_number() over(partition by job order by seq) as rn
  from q
)
select job, seq, work_center, department
from r 
where rn = 1
order by Decimal1 DESC
票数 0
EN

Stack Overflow用户

发布于 2021-03-30 23:54:06

我会尝试使用RANK()窗口函数。也许:

代码语言:javascript
复制
SELECT column1, 
          column2,
          rank() OVER (PARTITION BY job ORDER BY seq) AS seq_by_job

然后将其用作嵌套语句,并仅根据最小排名进行过滤(即WHERE nested_statement.seq_by_job = 1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66874074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档