当前位置: 首页 > 知识库问答 >
问题:

仅按多列联合得最大值(值)

公羊凌
2023-03-14

我想在最高时间为每个[组]检索一个结果。

当前代码的结果:

SELECT [Group], ArticleNumber, max(TimeTrue) as Time
FROM PerformanceOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber

UNION

SELECT [Group], ArticleNumber, max(StopTime) as Time
FROM StoppageOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber
ORDER BY Time DESC

结果应该只有两条记录(csv):

Group,ArticleNumber,Time
70521-030,,2021-03-15 13:50:15
Pack2,183026,2021-03-15 13:47:39

共有2个答案

芮岳
2023-03-14

尝试在时态表中使用order by选择前1,然后使用union查询它们

SELECT top 1[Group], ArticleNumber, max(TimeTrue) as Time into #tmp1
FROM PerformanceOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber
order by Time desc

SELECT top 1 [Group], ArticleNumber, max(StopTime) as Time into #tmp2
FROM StoppageOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber
ORDER BY Time DESC
    
select * from #tmp1
union
select * from #tmp2

drop table #tmp1
drop table #tmp2
曾晨
2023-03-14

嗯。..在聚合之前,您似乎希望联合所有:

SELECT [Group], ArticleNumber, max(Time) as Time
FROM ((SELECT [Group], ArticleNumber, TimeTrue as Time
       FROM PerformanceOpc 
       WHERE [Group] IN ('Pack2', '70521-030')
      ) UNION ALL
      (SELECT [Group], ArticleNumber, StopTime as Time
       FROM StoppageOpc
       WHERE [Group] IN ('Pack2', '70521-030')
      )
     ) g
GROUP BY [Group], ArticleNumber;

这将为每个组和文章返回一行,这似乎是您的查询正在做的事情。

如果您确实希望每个组只需要一行,那么您需要row_number()而不是聚合:

SELECT g.*
FROM (SELECT g.*, ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY time DESC) as seqnum
      FROM ((SELECT [Group], ArticleNumber, TimeTrue as Time
             FROM PerformanceOpc 
             WHERE [Group] IN ('Pack2', '70521-030')
            ) UNION ALL
            (SELECT [Group], ArticleNumber, StopTime as Time
             FROM StoppageOpc
             WHERE [Group] IN ('Pack2', '70521-030')
            )
           ) g
      ) g
WHERE seqnum = 1;
 类似资料:
  • 问题内容: 我正在使用Postgresql 8.4。我有一个这样的表: 我想写一个选择,该选择将给我最小值和最大值,并且所有类型的总计为。理想的结果应该是: 要获得最小值和最大值,我已经有: 为了获得独立选择的类型,我使用: 如何将它们组合成一个选择(效率不是很高)? 问题答案:

  • 我怎样才能以最有效的方式做到这一点? 用于测试的主类示例

  • 我需要在UniqueID上加入tableA和tableB,但是我只想加入tableA中具有某些状态限制的最新日期(不是在S中)。我知道我需要使用Max函数,但我不能让它工作。我如何得到下面的结果表? 我想的是:

  • 问题内容: 如何在Mongoose查询中获得最大值。在SQL中很容易 我想在Mongoose(node.js)中等效上述SQL代码 问题答案: MongoDB支持最大/最小,但他们不建议在实际应用中使用它: min和max主要用于支持mongos(分片)过程。 http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers 您几乎可

  • 我正在尝试获取日期的最大值和最小值。 从文档中,我看不到composite中的max选项:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_value_sources 我想要这样的东西: 是否可以添加到此查询中,

  • 问题内容: 例如,给定此表的稀疏ID: 我可以使用以下查询从表中获取最高的“ id”: 我得到: 我如何才能在最高“ id”之前获得“ id”(即使值不是连续的)? 问题答案: 是相同的 注意:这是事务性sql语法,根据您的供应商使用rownum或limit 获得第二行,你可以做