Answers:
您可以使用子选择:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
请注意,如果的值max(id)
不是唯一的,则返回多行。
如果您只想要这样的一行,请使用@MichaelMior的答案,
SELECT row from table ORDER BY id DESC LIMIT 1
id
它只是表中的一列。不能保证该id
列中的值必须唯一。
id
不是主键或唯一键:)给定名称,则很有可能是它。还值得注意的是,根据您使用的DBMS,使用subselect的方法效率可能低得多。
id
可以是外键,在这种情况下,它可能不是唯一的。我使用进行了一些基准测试set profiling = 1; ...; show profiles
,看来我们的解决方案使用MySQL时具有相同的性能。据我所知,您知道哪种DBMS的子选择性能较差吗?
你也可以
SELECT row FROM table ORDER BY id DESC LIMIT 1;
这将按行的ID降序对行进行排序,并返回第一行。这与返回具有最大ID的行相同。当然,这假定id
在所有行中都是唯一的。否则,可能会有多个行的最大值为,id
而您只会得到一个。
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)
不起作用?!
SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)
因此,我只需要entry_time
数据库中最新条目的条目即可。该陈述是否足够?应该是:SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
您不能给出,order by
因为order by
在表上进行了“全面扫描”。
以下查询更好:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BY
如果您假设这id
是表的主键,则不会进行完全扫描。(如果不是,它的名称就很差。)如果不是,那么您希望MAX(id)
在没有全表扫描的情况下如何工作?如果没有索引,则仍必须检查每个值以找到最大值。
试试这个
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table
人们也总是可以使用分析功能,这将给您更多的控制权
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
如果根据数据类型遇到rank()函数的问题,那么也可以从row_number()或density_rank()中进行选择。