我想创建一个查询,从列中获取所有不同的值,如果有多个值,则应选择最高值。
就好像我有一个表架构,如:
EmployeeName |任务| TimeGiven
并且员工可以为同一个Task
创建多个条目,并且我希望为所有具有最高Tasks
的员工获取所有不同的TimeGiven
,我该怎么做? ?
编辑
数据集:
EmployeName Task TimeGiven
Mr. X R&D 30
Mr. X R&D 50
Mr. X Devlpmnt 31
Mr. X Devlpmnt 60
Mr. Y R&D 40
Mr. Y R&D 10
Mr. Y R&D 90
Mr. Y Devlpmnt 10
**Result Needed:**
Mr. X R&D 50
Mr. X Devlpmnt 60
Mr. Y R&D 90
Mr. Y Devlpmnt 10
我需要的是每个员工,为每项任务获得最高TimeGiven
!
答案 0 :(得分:1)
听起来你需要使用group by
:
select EmployeeName
, Task
, TimeGiven = max(TimeGiven)
from t1
group by EmployeeName
, Task
评论后修改:
你的意思是:
select Task
, TimeGiven = max(TimeGiven)
from t1
group by Task
我所做的就是从查询中删除员工 - 无论哪个员工执行任务,这都将为每个任务提供记录最高的TimeGiven所有任务。
我还不清楚这是否是您需要的......如果没有,请提供示例数据集和您想要的输出。
添加数据集后进行修改:
第一个查询给出了正确的结果。我所做的就是添加一个order by子句来给出你的确切结果集:
select EmployeeName
, Task
, TimeGiven = max(TimeGiven)
from tasks
group by EmployeeName
, Task
order by EmployeeName
, Task desc
SQL Fiddle with demo。点击这里查看它的实际效果。