【发布时间】:2016-09-30 21:53:20
【问题描述】:
我在互联网上四处寻找解决此问题的方法,但似乎找不到我正在寻找的确切内容。
假设我们有一个如下所示的表:
_____________________________________________________
| id (PK) | name | date | ... other data ... |
-----------------------------------------------------
| 1 | BOB | 2016-11-20 | ....
--------------------------------
| 3 | CARL | 2015-09-02 | ....
--------------------------------
| 4 | BOB | 2016-11-18 | ....
--------------------------------
| 5 | JON | 2016-03-03 | ....
--------------------------------
| 6 | TIM | 2016-11-24 | ....
--------------------------------
| 7 | TIM | 2016-11-24 | ....
--------------------------------
| 8 | JON | 2016-05-05 | ....
--------------------------------
我需要一个查询:
1.返回一个不同的名字列表(distinct function)
2.对于每个名字都有最早的日期(min函数)
3. 上面两列的id。
4.如果日期相同,则使用 min(id) 来决定选择哪一行
所以在这种情况下所需的结果看起来像这样......
_____________________________________________________
| id (PK) | name | date | ... other data ... |
-----------------------------------------------------
| 3 | CARL | 2015-09-02 | ....
--------------------------------
| 4 | BOB | 2016-11-18 | ....
--------------------------------
| 5 | JON | 2016-03-03 | ....
--------------------------------
| 6 | TIM | 2016-11-24 | ....
--------------------------------
有没有一种方法可以在查询中有效地执行此操作,而无需创建临时表并使用脚本对其进行循环?
这让我成功了一半:
SELECT distinct(name), min(date), ... other data ... from table1
当我将 min 函数应用于 id 时,尽管它的行为并不符合我的需要。在 BOB 的情况下,它将两行混合并返回 1 表示“id”和“2016-11-18”表示日期 - 这是完全不正确的
非常感谢任何帮助。
【问题讨论】:
标签: sql-server aggregate-functions