SQL Server获取列不在Group By子句中?

时间:2014-10-23 19:44:20

标签: sql sql-server date group-by max

如何从此表中获得以下结果?

ID1|ID2| Date  
----------------------
1  | 1 | 01-01-2014  
1  | 2 | 02-01-2014  
2  | 3 | 03-01-2014

我想得到ID1& ID2表示按ID1分组的最长日期

结果:

1,2  
2,3

我的代码:

SELECT 
    ID1, MAX(DATE) 
FROM 
    Table 
GROUP BY 
    ID1

我需要像

这样的东西
SELECT 
    ID1, ID2, MAX(DATE) 
FROM 
    Table 
GROUP BY 
    ID1

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:3)

有三种方法可以做到。

一,子查询:

SELECT t1.ID1, t1.ID2, t2.MAX_DATE
FROM Table t1
INNER JOIN (
    SELECT ID1, MAX(DATE) AS "MAX_DATE" FROM Table GROUP BY ID1) t2
    ON t1.ID1 = t2.ID2

如果您使用的是SQL Server 2005 +,最新版本的Oracle或PostgreSQL(以及最近的不是MySQL或MariaDB),您可以使用OVER()子句:

SELECT ID1,
    ID2,
    MAX(DATE) OVER(PARTITION BY ID1)
FROM Table

或者您可以使用相关子查询:

SELECT t1.ID1, 
    t1.ID2, 
    (SELECT MAX(DATE) FROM Table WHERE ID1 = t1.ID1)
FROM Table t1

答案 1 :(得分:0)

您可以通过将表连接到聚合来完成此操作,如下所示:

SELECT t.*
FROM 
    Table t 
     INNER JOIN 
      (
        SELECT 
            ID1, 
            MAX(Date) MaxDate 
        FROM Table 
        GROUP BY ID1
      ) MaxDate ON
        t.ID1 = MaxDate.ID1 AND
        t.Date = MaxDate.MaxDate

答案 2 :(得分:0)

您可以使用ROW_NUMBER分析函数

SELECT *
FROM
(SELECT *,
      ROW_NUMBER() over ( partition by ID1 order by [date] desc) as seq
 FROM Table1
) T
WHERE T.seq =1