Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server get列不在Group By子句中?_Sql_Sql Server_Date_Group By_Max - Fatal编程技术网

SQL Server get列不在Group By子句中?

SQL Server get列不在Group By子句中?,sql,sql-server,date,group-by,max,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分组时,我想获得最长日期的ID1和ID2 结果: 1,2 2,3 我的代码: SELECT ID1, MAX(DATE) FROM Table GROUP BY ID1 我需要像这样的东西 SELECT

如何从该表中获得以下结果

ID1|ID2| Date  
----------------------
1  | 1 | 01-01-2014  
1  | 2 | 02-01-2014  
2  | 3 | 03-01-2014
当按ID1分组时,我想获得最长日期的ID1和ID2

结果:

1,2  
2,3
我的代码:

SELECT 
    ID1, MAX(DATE) 
FROM 
    Table 
GROUP BY 
    ID1
我需要像这样的东西

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

有人能帮我吗?

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

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

有三种方法

一、子查询:

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
SELECT t1.ID1, 
    t1.ID2, 
    (SELECT MAX(DATE) FROM Table WHERE ID1 = t1.ID1)
FROM Table t1
或者,如果您使用的是SQL Server 2005+、最新版本的Oracle或PostgreSQL(以及最新的东西不是MySQL或MariaDB),则可以使用
OVER()
子句:

也可以使用相关子查询:

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
SELECT t1.ID1, 
    t1.ID2, 
    (SELECT MAX(DATE) FROM Table WHERE ID1 = t1.ID1)
FROM Table t1

您可以使用
行数
分析功能

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