如何从此表中获得以下结果?
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
有人可以帮助我吗?
答案 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