我的SQL变得有点生疏,这是我设法从表中检索最新记录的 ids (基于 date 字段)的唯一方法相同的类型使用嵌套选择,但我怀疑必须有一种方法可以使用having
子句或更高效的方法执行相同操作。
假设唯一的列是ID
,TYPE
和DATE
,我当前的查询是:
select ID from MY_TABLE,
(select TYPE as GROUP_TYPE,
max(DATE) as MAX_DATE
from MY_TABLE group by TYPE)
where TYPE = GROUP_TYPE
and DATE = MAX_DATE
(我是从我的记忆中写的,也许有一些语法错误,但你明白了)
答案 0 :(得分:3)
我更倾向于坚持使用没有专有扩展的纯标准SQL。
然后没有“更有效”的方式来编写此查询。不在标准ANSI-SQL中。问题是您正在尝试将AGGREGATE列(最大日期)与基本列(日期)进行比较以返回另一个基本列(ID)。 HAVING子句无法处理这种类型的比较。
有一些方法可以使用ROW_NUMBER(窗口函数)或MySQL(由hack分组)来实现,但这些方法不能跨数据库系统移植。
答案 1 :(得分:0)
根据您的数据
,这可以让您更近select ID from MY_TABLE
where (DATE = (select max(DATE) from MY_TABLE as X
where X.TYPE = MY_TABLE.TYPE)
答案 2 :(得分:0)
SELECT a.id, a.type, a.dater
from my_table a inner join
(
select type, max(dater) as dater2
from my_table
group by type
) b
on a.type= b.type and a.dater= b.dater2