如何 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
我有给定的列 --->
"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