Jor*_*ues 5 sql sql-server group-by date max
如何从该表中得到以下结果?
ID1|ID2| Date
----------------------
1 | 1 | 01-01-2014
1 | 2 | 02-01-2014
2 | 3 | 03-01-2014
Run Code Online (Sandbox Code Playgroud)
当按 ID1 分组时,我想获取 ID1 和 ID2 的最大日期
结果:
1,2
2,3
Run Code Online (Sandbox Code Playgroud)
我的代码:
SELECT
ID1, MAX(DATE)
FROM
Table
GROUP BY
ID1
Run Code Online (Sandbox Code Playgroud)
我需要类似的东西
SELECT
ID1, ID2, MAX(DATE)
FROM
Table
GROUP BY
ID1
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
有三种方法可以做到。
一、子查询:
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
Run Code Online (Sandbox Code Playgroud)
或者,OVER()如果您使用的是 SQL Server 2005+、Oracle 的最新版本或 PostgreSQL(以及不是 MySQL 或 MariaDB 的最新版本),则可以使用该子句:
SELECT ID1,
ID2,
MAX(DATE) OVER(PARTITION BY ID1)
FROM Table
Run Code Online (Sandbox Code Playgroud)
或者您可以使用相关子查询:
SELECT t1.ID1,
t1.ID2,
(SELECT MAX(DATE) FROM Table WHERE ID1 = t1.ID1)
FROM Table t1
Run Code Online (Sandbox Code Playgroud)
您可以通过将表连接到聚合来完成此操作,如下所示:
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
Run Code Online (Sandbox Code Playgroud)