【问题标题】:Handling multiple values in DISTINCT在 DISTINCT 中处理多个值
【发布时间】:2013-02-22 20:21:18
【问题描述】:

我想创建一个从列中获取所有不同值的查询,如果有多个值,它应该选择最高的一个。

如果我有一个类似的表架构:

员工姓名 |任务 |给定时间

并且员工可以对同一个Task 有多个条目,我想为所有具有最高TimeGiven 的员工获取所有不同的Tasks,我该怎么做?

编辑
数据集:

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!

【问题讨论】:

  • 您是否尝试过使用临时表或视图来处理此任务?
  • 我正在使用视图,但不确定它们将如何帮助我解决这个问题?

标签: sql-server


【解决方案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。点击这里查看它的实际效果。

【讨论】:

  • 实际上我想为每个员工获得最大的TimeGiven。很抱歉没有解决这个问题!
  • 见上文;原始答案按要求工作;我添加了一个演示,展示了这一点。
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 2014-07-17
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多