【问题标题】:How to return top 2 values based on multiple column values如何根据多列值返回前 2 个值
【发布时间】:2019-12-08 05:35:20
【问题描述】:

我有给定的列--->

"id"| "name"| "hour8"| "hour9"| "hour10"| "hour11"| "hour12"|
 1     a        3.6      4.2      1.3       5.6       2.4
 2     b        0.2      7.6      2.3       4.0       0.5

我想从 hour8,9,10,11,12 的小时数据中提取前 2 个值作为 id,名称。

我是一个初学者,所以任何帮助或想法表示赞赏。

我的查询只能得到一列。但我需要前 2 列值。

SELECT ID, MAX(maxhour) AS maxhour
FROM ##TestTabletb
UNPIVOT (maxhour FOR Val IN ( hour8, hour9, hour10,hour11, hour12 ) ) AS u
GROUP BY ID, Name

“我希望输出是

"id"| "name"| "hour9"| "hour11"| 
 1     a         4.2     5.6     

类似的东西。

【问题讨论】:

  • 能否请您向我们展示您的代码并指出您遇到问题的地方。
  • 还有,你用的是什么数据库。
  • @HereGoes> 给出了我尝试过的查询。
  • 对不起,我不能,直到明天。我仍然需要了解数据库,因为取决于数据库,我可能无法提供帮助。
  • 它的 SSMS。 sql服务器

标签: sql sql-server select max min


【解决方案1】:

我认为这可能会给你你所需要的......

    SELECT r.id,
 y.val column1,
 r.maxhour1,
 z.val column2,
 r.maxhour2
 FROM (
SELECT  u.ID, 
MAX(u.maxhour) AS maxhour1, 
MAX(x.maxhour) as maxhour2
FROM ##TestTabletb 
UNPIVOT (maxhour FOR Val IN ( hour8, hour9, hour10,hour11, hour12 ) ) AS u,
     ##TestTabletb 
UNPIVOT (maxhour FOR Val IN ( hour8, hour9, hour10,hour11, hour12 ) ) AS x               
    WHERE u.id = x.id and u.maxhour > x.maxhour 
group by u.ID ) r,
##TestTabletb 
UNPIVOT (maxhour FOR Val IN ( hour8, hour9, hour10,hour11, hour12 ) ) AS y,
##TestTabletb 
UNPIVOT (maxhour FOR Val IN ( hour8, hour9, hour10,hour11, hour12 ) ) AS z
  WHERE r.id = y.id and r.maxhour1 = y.maxhour and
  r.id = z.id and r.maxhour2 = z.maxhour
order by r.id

【讨论】:

  • 这项工作就像魔术一样。而且,我想要它是几小时,top2?有可能吗?
  • 我需要考虑一下。
  • 我做了一些更改,希望对您有所帮助。
【解决方案2】:

我不确定,但也许你可以试试:

SELECT MIN(ID) AS "id", MIN(name) AS "name", MIN(hour9) AS "hour9", MAX(hour11) AS "hour11"
FROM TestTabletb
GROUP BY ID, Name

【讨论】:

  • 谢谢。我希望最大值的排序是列级别的。
【解决方案3】:

您应该使用 ORDER BY。 按第 1 列 DESC、第 2 列 DESC 排序 只需指定要计算的条件和列。

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多