如何仅显示SQL数据中所需的一条记录,是使用select top 1的最佳方法?

问题描述

这是我的SQL查询

select emailid,emailsentime


from [dbo].[clientbase]

where emailsent time > '1995-01-02'
and   emailsent time < '1995-01-03'

order by emailsenttime desc

但是它要提取该日期的所有电子邮件ID,我只想显示记录的第一行(因为这是该日期发送的最新电子邮件ID。

我想尝试一下,因为当前我正在执行下降操作(如果我正在执行上升操作,那将是最近的操作)。

但是如何仅获取最高记录而不提取所有数据。

我的意思是我运行了这个查询,它显示了这样的数据

emailid          emailsenttime

1986789          1995-01-02 22:51:12
1986788          1995-01-02 22:50:12
1986787          1995-01-02 22:49:12
1986786          1995-01-02 22:48:12

解决方法

您需要行限制查询。

在标准SQL中,您可以这样做:

select ...
from ...
where ...
order by emailsenttime desc
fetch first 1 row only

也就是说,语法可能会因您的数据库而异,例如:

  • MySQL,Postgres:

    select ...
    from ...
    where ...
    order by emailsenttime desc
    limit 1
    
  • 旧版本的SQL Server:

    select top (1) ...
    from ...
    where ...
    order by emailsenttime desc