-2

我有这样的表:

type       | date       | id
-----------------------------
1          | 2012-01-01 | 1
2          | 2012-01-01 | 2
1          | 2012-02-02 | 3
2          | 2012-02-02 | 4

我需要构建查询来选择所有“最新”的不同类型值(在本例中,它将是 id 为 3 和 4 的记录)。现在我有这个解决方案:

select * from test t1 where date = 
(select max(date) from test t2 where t2.type = t1.type ) order by type, date desc

我对嵌套选择的存在感到尴尬,也许有更优雅的解决方案?

4

2 回答 2

3

因为你没有提到你正在使用的 RDBMS,所以试试这个。将适用于大多数 RDBMS。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  type, MAX(DATE) maxDAte
            FROM tableName
            GROUP BY type
        ) b ON a.type = b.type AND
                a.DATE = b.maxDate

或者如果您的 RDBMS 支持Window Function

SELECT type, date, id
FROM
(
    SELECT type, date, id,
            ROW_NUMBER() OVER (PARTITION BY type
                                ORDER BY date DESC) rn
    FROM tableNAme
) s
WHERE rn = 1
于 2012-11-28T14:46:19.430 回答
1

在您的特定示例中,这也可以工作:

select type, max(date), max(id)
from your_table
group by type

但请注意,只有当您绝对确定日期和 ID 总是在增加时,它才会起作用。如果不是这种情况,则max(date)可能max(id)位于两个不同的行上。仅当您知道自己在做什么时才使用它!如果没有,嵌套查询没有任何问题。

于 2012-11-28T14:58:34.577 回答