将所有列保留在MIN / MAX查询中,但返回1个结果

时间:2015-02-10 17:54:42

标签: sql ms-access

我确信我之前已经这样做了,但似乎已经忘记了......

我正在尝试过滤一个记录集,以便我只获得1条记录,例如,如果这是我的名为 TableA 的表:

|  ID  |  User |  Type  |   Date   |
------------------------------------
|  1   | Matt  | Opened | 1/8/2014 |
|  2   | Matt  | Opened | 2/8/2014 |
|  3   | Matt  | Created| 5/8/2014 |
|  4   | John  | Opened | 1/8/2014 |
|  5   | John  | Created| 2/8/2014 |

我想过滤它,所以我得到了MIN日期,其中用户是“马特”而类型是“已打开”。

结果集需要包含ID字段并仅返回1条记录,因此它看起来像这样:

|  ID  |  User |  Type  |   Date   |
------------------------------------
|  1   | Matt  | Opened | 1/8/2014 |

在选择ID字段时,我很难超越GROUPBY要求......这似乎忽略了日期的MIN并返回了超过1条记录。

3 个答案:

答案 0 :(得分:3)

使用TOPORDER BY

select top 1 *
from table
where user = "Matt" and type = "Opened"
order by date asc;

修改:从descasc更改了顺序,因为这可以实现我所追求的MIN效果。

答案 1 :(得分:1)

另一种方法是找到每minmax的{​​{1}}或user日期,然后将结果重新加入主表

type

答案 2 :(得分:0)

你可以非常轻松地尝试使用分区功能,它可以为每个用户提供更好的结果

;WITH cte
AS (
    SELECT *
        ,ROW_NUMBER() OVER (
            PARTITION BY [USER]
            ,type ORDER BY DATE ASC
            ) rnk
    FROM tablea
    )
SELECT *
FROM cte
WHERE type = 'opened'
    AND rnk = 1