如何 return 基于多个列值的前 2 个值

How to return top 2 values based on multiple column values

我有给定的列 --->

"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,name。

我是初学者,所以任何帮助或想法都将不胜感激。

我的查询只能得到一列。但我需要前 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     

像这样。

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

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

您应该使用 ORDER BY。 ORDER BY 列 1 降序,列 2 降序 只需指定您的条件和要计算的列。

我认为这可能会满足您的需求...

    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